From 63e17af2d27904baaf078579fc4fad8fbb3a832d Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sun, 22 Mar 2015 14:50:13 -0500 Subject: [PATCH] new file: src/lib/jsmn/example/MAPTEST2.EXE modified: src/lib/jsmn/example/maptest2.c --- src/lib/jsmn/example/MAPTEST2.EXE | Bin 0 -> 14120 bytes src/lib/jsmn/example/maptest2.c | 166 ++++++++++++++++-------------- 2 files changed, 86 insertions(+), 80 deletions(-) create mode 100644 src/lib/jsmn/example/MAPTEST2.EXE diff --git a/src/lib/jsmn/example/MAPTEST2.EXE b/src/lib/jsmn/example/MAPTEST2.EXE new file mode 100644 index 0000000000000000000000000000000000000000..7c9d253ba79e492f3eca1464c0be2ea04a444a4e GIT binary patch literal 14120 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 CMJ25O literal 0 HcmV?d00001 diff --git a/src/lib/jsmn/example/maptest2.c b/src/lib/jsmn/example/maptest2.c index 9de99e28..41e2544a 100644 --- a/src/lib/jsmn/example/maptest2.c +++ b/src/lib/jsmn/example/maptest2.c @@ -1,107 +1,113 @@ #include -#include #include +#include +#include #include "../jsmn.c" /* - * A small example of jsmn parsing when JSON structure is known and number of - * tokens is predictable. + * An example of reading JSON from stdin and printing its content to stdout. + * The output looks like YAML, but I'm not sure if it's really compatible. */ -/*char *JSON_S = - "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " - "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";*/ - -char *JSON_STRING; - -long int filesize(FILE *fp) -{ - long int save_pos, size_of_file; - - save_pos = ftell(fp); - fseek(fp, 0L, SEEK_END); - size_of_file = ftell(fp); - fseek(fp, save_pos, SEEK_SET); - return(size_of_file); -} - -static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { - if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start && - strncmp(json + tok->start, s, tok->end - tok->start) == 0) { +static int dump(const char *js, jsmntok_t *t, size_t count, int indent) { + int i, j, k; + if (count == 0) { return 0; } - return -1; + if (t->type == JSMN_PRIMITIVE) { + printf("%.*s", t->end - t->start, js+t->start); + return 1; + } else if (t->type == JSMN_STRING) { + printf("'%.*s'", t->end - t->start, js+t->start); + return 1; + } else if (t->type == JSMN_OBJECT) { + printf("\n"); + j = 0; + for (i = 0; i < t->size; i++) { + for (k = 0; k < indent; k++) printf(" "); + j += dump(js, t+1+j, count-j, indent+1); + printf(": "); + j += dump(js, t+1+j, count-j, indent+1); + printf("\n"); + } + return j+1; + } else if (t->type == JSMN_ARRAY) { + j = 0; + printf("\n"); + for (i = 0; i < t->size; i++) { + for (k = 0; k < indent-1; k++) printf(" "); + printf(" - "); + j += dump(js, t+1+j, count-j, indent+1); + printf("\n"); + } + return j+1; + } + return 0; } int main() { - int i; - int r; - jsmn_parser p; FILE *fh = fopen("../../../../data/test.map", "r"); - jsmntok_t t[1536]; /* We expect no more than 128 tokens */ - char JSON_S[6144]; - memset(JSON_S, 0, sizeof(JSON_S)); + int r; + int eof_expected = 0; + char *js = NULL; + size_t jslen = 0; + char buf[BUFSIZ]; - if(fh != NULL) - { - fread(JSON_S, sizeof(char), filesize(fh), fh); - // we can now close the file - //printf("]%s[\n", JSON_S); - JSON_STRING=JSON_S; - //printf("[[%s]]\n", JSON_STRING); + jsmn_parser p; + jsmntok_t *tok; + size_t tokcount = 2; + /* Prepare parser */ jsmn_init(&p); - r = jsmn_parse(&p, JSON_STRING, filesize(fh), t, sizeof(t)/sizeof(t[0])); - fclose(fh); fh = NULL; - printf("%s", JSON_STRING); - if (r < 0) { - printf("Failed to parse JSON: %d\n", r); - return 1; - } - /* Assume the top-level element is an object */ - if (r < 1 || t[0].type != JSMN_OBJECT) { - printf("Object expected\n"); - return 1; + /* Allocate some tokens as a start */ + tok = malloc(sizeof(*tok) * tokcount); + if (tok == NULL) { + fprintf(stderr, "malloc(): errno=%d\n", errno); + return 3; } - /* Loop over all keys of the root object */ - for (i = 1; i < r; i++) { - if (jsoneq(JSON_STRING, &t[i], "image") == 0) { - /* We may use strndup() to fetch string value */ - printf("- image: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); - i++; - } else if (jsoneq(JSON_STRING, &t[i], "admin") == 0) { - /* We may additionally check if the value is either "true" or "false" */ - printf("- Admin: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); - i++; - } else if (jsoneq(JSON_STRING, &t[i], "uid") == 0) { - /* We may want to do strtol() here to get numeric value */ - printf("- UID: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); - i++; - } else if (jsoneq(JSON_STRING, &t[i], "tilesets") == 0) { - int j; - printf("- tilesets:\n"); - if (t[i+1].type != JSMN_ARRAY) { - continue; /* We expect groups to be an array of strings */ + for (;;) { + /* Read another chunk */ + r = fread(buf, 1, sizeof(buf), fh); + if (r < 0) { + fprintf(stderr, "fread(): %d, errno=%d\n", r, errno); + return 1; + } + if (r == 0) { + if (eof_expected != 0) { + return 0; + } else { + fprintf(stderr, "fread(): unexpected EOF\n"); + return 2; } - for (j = 0; j < t[i+1].size; j++) { - jsmntok_t *g = &t[i+j+2]; - printf(" * %.*s\n", g->end - g->start, JSON_STRING + g->start); + } + + js = realloc(js, jslen + r + 1); + if (js == NULL) { + fprintf(stderr, "realloc(): errno=%d\n", errno); + return 3; + } + strncpy(js + jslen, buf, r); + jslen = jslen + r; + +again: + r = jsmn_parse(&p, js, jslen, tok, tokcount); + if (r < 0) { + if (r == JSMN_ERROR_NOMEM) { + tokcount = tokcount * 2; + tok = realloc(tok, sizeof(*tok) * tokcount); + if (tok == NULL) { + fprintf(stderr, "realloc(): errno=%d\n", errno); + return 3; + } + goto again; } - i += t[i+1].size + 1; } else { - printf("Unexpected key: %.*s\n", t[i].end-t[i].start, - JSON_STRING + t[i].start); + dump(js, tok, p.toknext, 0); + eof_expected = 1; } } - //free(JSON_STRING); - } - if (fh != NULL) fclose(fh); - ////} return 0; } -- 2.39.5