Module Name: othersrc
Committed By: agc
Date: Wed Mar 5 04:58:51 UTC 2014
Modified Files:
othersrc/external/bsd/transit/bin: Makefile
othersrc/external/bsd/transit/dist: libtransit.3 transit.c transit.h
Added Files:
othersrc/external/bsd/transit/bin: 16.expected
Log Message:
Changes to transit-20140304
+ add 2 accessor functions for lists/dicts, one to get a field by its index,
and the other for dicts to get the field value by name
+ bump version number to 20140304
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 othersrc/external/bsd/transit/bin/16.expected
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/transit/bin/Makefile
cvs rdiff -u -r1.1.1.1 -r1.2 othersrc/external/bsd/transit/dist/libtransit.3
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/transit/dist/transit.c \
othersrc/external/bsd/transit/dist/transit.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/external/bsd/transit/bin/Makefile
diff -u othersrc/external/bsd/transit/bin/Makefile:1.3 othersrc/external/bsd/transit/bin/Makefile:1.4
--- othersrc/external/bsd/transit/bin/Makefile:1.3 Tue Feb 25 08:54:43 2014
+++ othersrc/external/bsd/transit/bin/Makefile Wed Mar 5 04:58:51 2014
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.3 2014/02/25 08:54:43 agc Exp $
+# $NetBSD: Makefile,v 1.4 2014/03/05 04:58:51 agc Exp $
.include <bsd.own.mk>
@@ -93,3 +93,8 @@ t: ${PROG}
env LD_LIBRARY_PATH=${LIB_TRANSIT_DIR} ./${PROG} -d -j 15.enc > 15.out
diff 15.expected 15.out
rm -f 15.enc 15.out
+ @echo "16. json structured data as output"
+ env LD_LIBRARY_PATH=${LIB_TRANSIT_DIR} ./${PROG} -j '{"array":{"field1":1,"field2":"val2","field3":"string value 3","field4":"val4"},"array2":[1,2,3,4,5,6,7,8]}' > 16.enc
+ env LD_LIBRARY_PATH=${LIB_TRANSIT_DIR} ./${PROG} -d -j 16.enc > 16.out
+ diff 16.expected 16.out
+ rm -f 16.enc 16.out
Index: othersrc/external/bsd/transit/dist/libtransit.3
diff -u othersrc/external/bsd/transit/dist/libtransit.3:1.1.1.1 othersrc/external/bsd/transit/dist/libtransit.3:1.2
--- othersrc/external/bsd/transit/dist/libtransit.3:1.1.1.1 Mon Feb 24 05:59:13 2014
+++ othersrc/external/bsd/transit/dist/libtransit.3 Wed Mar 5 04:58:51 2014
@@ -1,4 +1,4 @@
-.\" $NetBSD: libtransit.3,v 1.1.1.1 2014/02/24 05:59:13 agc Exp $
+.\" $NetBSD: libtransit.3,v 1.2 2014/03/05 04:58:51 agc Exp $
.\"
.\" Copyright (c) 2014 Alistair Crooks <[email protected]>
.\" All rights reserved.
@@ -23,7 +23,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd February 22, 2014
+.Dd March 4, 2014
.Dt LIBTRANSIT 3
.Os
.Sh NAME
@@ -89,6 +89,16 @@ atoms, or fields of atoms.
.Fo transit_size
.Fa "transit_t *transit"
.Fc
+.Pp
+Some dictionary and list access functions are also defined.
+.Ft int
+.Fo transit_field_by_index
+.Fa "transit_t *transit" "uint32_t dictnum" "uint32_t fieldnum" "transit_atom_t *result"
+.Fc
+.Ft int
+.Fo transit_field_by_name
+.Fa "transit_t *transit" "uint32_t dictnum" "const char *fieldname" "transit_atom_t *result"
+.Fc
.Sh DESCRIPTION
The
.Nm
Index: othersrc/external/bsd/transit/dist/transit.c
diff -u othersrc/external/bsd/transit/dist/transit.c:1.3 othersrc/external/bsd/transit/dist/transit.c:1.4
--- othersrc/external/bsd/transit/dist/transit.c:1.3 Tue Feb 25 08:54:43 2014
+++ othersrc/external/bsd/transit/dist/transit.c Wed Mar 5 04:58:51 2014
@@ -421,3 +421,45 @@ transit_size(transit_t *trans)
{
return (trans) ? trans->c : 0;
}
+
+/*****************************************************/
+
+/* dictionary/list accessors */
+
+/* return the contents of the list/dict field, accessed by number */
+int
+transit_field_by_index(transit_t *t, uint32_t dict, uint32_t field, transit_atom_t *ret)
+{
+ transit_atom_t *atom;
+ transit_atom_t *el;
+ uint64_t *indices;
+
+ atom = transit_atom(t, dict);
+ indices = transit_atom_ptr(atom);
+ el = transit_atom(t, indices[field]);
+ memcpy(ret, el, sizeof(*ret));
+ return 1;
+}
+
+/* return the contents of the dict value, accessed by name */
+int
+transit_field_by_name(transit_t *t, uint32_t dict, const char *name, transit_atom_t *ret)
+{
+ transit_atom_t *atom;
+ transit_atom_t *el;
+ uint64_t *indices;
+ uint64_t i;
+
+ atom = transit_atom(t, dict);
+ indices = transit_atom_ptr(atom);
+ for (i = 2 ; i < transit_atom_size(atom) ; i += 2) {
+ el = transit_atom(t, indices[i]);
+ if (el->type == TRANSIT_STRING && memcmp(name, el->v, el->n) == 0) {
+ el = transit_atom(t, indices[i + 1]);
+ memcpy(ret, el, sizeof(*ret));
+ return 1;
+ }
+ }
+ return 0;
+}
+
Index: othersrc/external/bsd/transit/dist/transit.h
diff -u othersrc/external/bsd/transit/dist/transit.h:1.3 othersrc/external/bsd/transit/dist/transit.h:1.4
--- othersrc/external/bsd/transit/dist/transit.h:1.3 Tue Mar 4 02:14:15 2014
+++ othersrc/external/bsd/transit/dist/transit.h Wed Mar 5 04:58:51 2014
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TRANSIT_H_
-#define TRANSIT_H_ 20140303
+#define TRANSIT_H_ 20140304
#include <sys/types.h>
@@ -82,6 +82,10 @@ transit_atom_t *transit_atom(transit_t *
uint8_t *transit_encoded(transit_t */*trans*/);
uint64_t transit_size(transit_t */*trans*/);
+/* list/dict accessor functions */
+int transit_field_by_index(transit_t */*t*/, uint32_t /*dict*/, uint32_t /*field*/, transit_atom_t */*ret*/);
+int transit_field_by_name(transit_t */*t*/, uint32_t /*dict*/, const char */*name*/, transit_atom_t */*ret*/);
+
__END_DECLS
#endif
Added files:
Index: othersrc/external/bsd/transit/bin/16.expected
diff -u /dev/null othersrc/external/bsd/transit/bin/16.expected:1.1
--- /dev/null Wed Mar 5 04:58:51 2014
+++ othersrc/external/bsd/transit/bin/16.expected Wed Mar 5 04:58:51 2014
@@ -0,0 +1 @@
+{"array":{"field1":1,"field2":"val2","field3":"string value 3","field4":"val4"},"array2":[1,2,3,4,5,6,7,8]}