X-Git-Url: https://develop.uap-core.de/gitweb/uwplayer.git/blobdiff_plain/1e2b55c2c2e79a41dd0056fda7966dabc329fc0d..ac79c9d337cc83d38b530a8ba06fdca15ffe217e:/application/json.c diff --git a/application/json.c b/application/json.c index 4dd672c..bd27f2f 100644 --- a/application/json.c +++ b/application/json.c @@ -51,6 +51,13 @@ JSONParser* json_parser_new(void) { return parser; } +void json_parser_free(JSONParser *p) { + if(p->states) free(p->states); + if(p->readvalue_stack) free(p->readvalue_stack); + + free(p); +} + void json_parser_fill(JSONParser *p, const char *buf, size_t size) { p->buffer = buf; p->size = size; @@ -614,9 +621,10 @@ int json_reader_isnull(JSONParser *p) { JSONLiteralType json_reader_literal(JSONParser *p) { const char *l = p->reader_token.content; - if(!strcmp(l, "true")) { + size_t token_len = p->reader_token.length; + if(token_len == 4 && !memcmp(l, "true", 4)) { return JSON_TRUE; - } else if(!strcmp(l, "false")) { + } else if(token_len == 5 && !memcmp(l, "false", 5)) { return JSON_FALSE; } return JSON_NULL; @@ -744,10 +752,11 @@ static int add_to_parent(JSONParser *p, JSONValue *parent, JSONValue *v) { static int readvaluestack_add(JSONParser *p, JSONValue *v) { if(p->readvalue_nelm == p->readvalue_alloc) { p->readvalue_alloc *= 2; - p->readvalue_stack = realloc(p->readvalue_stack, sizeof(JSONValue*) * p->readvalue_alloc); - if(!p->readvalue_stack) { + JSONValue **new_stack = realloc(p->readvalue_stack, sizeof(JSONValue*) * p->readvalue_alloc); + if(!new_stack) { return -1; } + p->readvalue_stack = new_stack; } p->readvalue_stack[p->readvalue_nelm++] = v; return 0; @@ -885,3 +894,20 @@ void json_value_free(JSONValue *value) { } free(value); } + +int json_strcmp(JSONValue *jsstr, const char *str) { + return json_strncmp(jsstr, str, strlen(str)); +} + +int json_strncmp(JSONValue *jsstr, const char *str, size_t slen) { + if(jsstr->type != JSON_STRING) { + return -1; + } + size_t jsstrlen = jsstr->value.string.length; + + if(jsstrlen != slen) { + return jsstrlen > slen ? 1 : -1; + } + + return memcmp(jsstr->value.string.string, str, slen); +}