X-Git-Url: http://www.project-moonshot.org/gitweb/?p=jansson.git;a=blobdiff_plain;f=test%2Fbin%2Fjson_process.c;h=1ed0c578f1cc44a6b019955fc7655d34c3969db5;hp=a2475b7af0b3dfec5b03a57217721ef926990c96;hb=5df7b7939794abc9e8a826919d84d27385a6679d;hpb=e54ea1f7c904a5beef64ca0fe986cf7dc4f62296 diff --git a/test/bin/json_process.c b/test/bin/json_process.c index a2475b7..1ed0c57 100644 --- a/test/bin/json_process.c +++ b/test/bin/json_process.c @@ -7,6 +7,8 @@ #include #include +#include +#include #include static int getenv_int(const char *name) @@ -25,6 +27,26 @@ static int getenv_int(const char *name) return (int)result; } +/* Return a pointer to the first non-whitespace character of str. + Modifies str so that all trailing whitespace characters are + replaced by '\0'. */ +static const char *strip(char *str) +{ + size_t length; + char *result = str; + while(*result && isspace(*result)) + result++; + + length = strlen(result); + if(length == 0) + return result; + + while(isspace(result[length - 1])) + result[--length] = '\0'; + + return result; +} + int main(int argc, char *argv[]) { int indent = 0; @@ -59,9 +81,39 @@ int main(int argc, char *argv[]) if(getenv_int("JSON_SORT_KEYS")) flags |= JSON_SORT_KEYS; - json = json_loadf(stdin, 0, &error); + if(getenv_int("STRIP")) { + /* Load to memory, strip leading and trailing whitespace */ + size_t size = 0, used = 0; + char *buffer = NULL; + + while(1) { + int count; + + size = (size == 0 ? 128 : size * 2); + buffer = realloc(buffer, size); + if(!buffer) { + fprintf(stderr, "Unable to allocate %d bytes\n", (int)size); + return 1; + } + + count = fread(buffer + used, 1, size - used, stdin); + if(count < size - used) { + buffer[used + count] = '\0'; + break; + } + used += count; + } + + json = json_loads(strip(buffer), 0, &error); + free(buffer); + } + else + json = json_loadf(stdin, 0, &error); + if(!json) { - fprintf(stderr, "%d\n%s\n", error.line, error.text); + fprintf(stderr, "%d %d %d\n%s\n", + error.line, error.column, error.position, + error.text); return 1; }