From 4bff7981b7d731a43b02a867ca1acdb9a90898f0 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 21 Jul 2008 16:11:00 +0000 Subject: [PATCH] update snapshot of Jean Gressmann's JSON parser --- libtransmission/JSON_parser.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/libtransmission/JSON_parser.c b/libtransmission/JSON_parser.c index 21c7f353b..d3f58869a 100644 --- a/libtransmission/JSON_parser.c +++ b/libtransmission/JSON_parser.c @@ -32,7 +32,9 @@ SOFTWARE. For the added features the license above applies also. Changelog: - + 2008/07/19 + - Removed some duplicate code & debugging variable (Charles.Kerr@noaa.gov) + 2008/05/28 - Made JSON_value structure ansi C compliant. This bug was report by trisk@acm.jhu.edu @@ -57,7 +59,7 @@ SOFTWARE. #include "ConvertUTF.h" #if _MSC_VER >= 1400 /* Visual Studio 2005 and up */ -# pragma warning(disable:4996) /* unsecure sscanf */ +# pragma warning(disable:4996) // unsecure sscanf #endif @@ -293,12 +295,14 @@ push(JSON_parser jc, int mode) jc->top += 1; if (jc->depth < 0) { if (jc->top >= jc->stack_capacity) { + size_t bytes_to_allocate; jc->stack_capacity *= 2; + bytes_to_allocate = jc->stack_capacity * sizeof(jc->static_stack[0]); if (jc->stack == &jc->static_stack[0]) { - jc->stack = (signed char*)malloc(jc->stack_capacity * sizeof(jc->static_stack[0])); + jc->stack = (signed char*)malloc(bytes_to_allocate); memcpy(jc->stack, jc->static_stack, sizeof(jc->static_stack)); } else { - jc->stack = (signed char*)realloc(jc->stack, jc->stack_capacity * sizeof(jc->static_stack[0])); + jc->stack = (signed char*)realloc(jc->stack, bytes_to_allocate); } } } else { @@ -426,12 +430,14 @@ new_JSON_parser(JSON_config* config) static void grow_parse_buffer(JSON_parser jc) { + size_t bytes_to_allocate; jc->parse_buffer_capacity *= 2; + bytes_to_allocate = jc->parse_buffer_capacity * sizeof(jc->parse_buffer[0]); if (jc->parse_buffer == &jc->static_parse_buffer[0]) { - jc->parse_buffer = (char*)malloc(jc->parse_buffer_capacity * sizeof(jc->parse_buffer[0])); + jc->parse_buffer = (char*)malloc(bytes_to_allocate); memcpy(jc->parse_buffer, jc->static_parse_buffer, jc->parse_buffer_count); } else { - jc->parse_buffer = (char*)realloc(jc->parse_buffer, jc->parse_buffer_capacity * sizeof(jc->parse_buffer[0])); + jc->parse_buffer = (char*)realloc(jc->parse_buffer, bytes_to_allocate); } } @@ -439,7 +445,7 @@ static void grow_parse_buffer(JSON_parser jc) do {\ if (jc->parse_buffer_count + 1 >= jc->parse_buffer_capacity) grow_parse_buffer(jc);\ jc->parse_buffer[jc->parse_buffer_count++] = c;\ - jc->parse_buffer[jc->parse_buffer_count] = 0;\ + jc->parse_buffer[jc->parse_buffer_count] = 0;\ } while (0) @@ -456,7 +462,6 @@ static int parse_parse_buffer(JSON_parser jc) jc->type == JSON_T_FLOAT || jc->type == JSON_T_INTEGER || jc->type == JSON_T_STRING); - switch(jc->type) { case JSON_T_FLOAT: