webmcp
changeset 162:3b8c1e2aef9c
Some code cleanup in json.import(...) function
author | jbe |
---|---|
date | Thu Jul 31 16:24:39 2014 +0200 (2014-07-31) |
parents | d476b3c8960d |
children | 581878c613d6 |
files | libraries/json/json.c |
line diff
1.1 --- a/libraries/json/json.c Thu Jul 31 13:22:35 2014 +0200 1.2 +++ b/libraries/json/json.c Thu Jul 31 16:24:39 2014 +0200 1.3 @@ -123,7 +123,7 @@ 1.4 char c; // variable to store a single character to be processed 1.5 luaL_Buffer luabuf; // Lua buffer to decode JSON string values 1.6 char *cbuf; // C buffer to decode JSON string values 1.7 - size_t writepos; // write position of decoded strings in C buffer 1.8 + size_t outlen; // maximum length or write position of C buffer 1.9 size_t arraylen; // variable to temporarily store the array length 1.10 // stack shall contain one function argument: 1.11 lua_settop(L, 1); 1.12 @@ -297,28 +297,27 @@ 1.13 case '"': 1.14 // consume quote character: 1.15 pos++; 1.16 - // determine buffer length: 1.17 - writepos = pos; 1.18 - while ((c = str[writepos]) != '"') { 1.19 + // find last character in input string: 1.20 + outlen = pos; 1.21 + while ((c = str[outlen]) != '"') { 1.22 // consume one character: 1.23 - writepos++; 1.24 + outlen++; 1.25 // handle unexpected end of JSON document: 1.26 if (c == 0) goto json_import_unexpected_eof; 1.27 // consume one extra character when encountering an escaped quote: 1.28 - else if (c == '\\' && str[writepos] == '"') writepos++; 1.29 + else if (c == '\\' && str[outlen] == '"') outlen++; 1.30 } 1.31 - writepos -= pos; 1.32 + // determine buffer length: 1.33 + outlen -= pos; 1.34 // check if string is non empty: 1.35 - if (writepos) { 1.36 + if (outlen) { 1.37 // prepare buffer to decode string (with maximum possible length) and set write position to zero: 1.38 - cbuf = luaL_buffinitsize(L, &luabuf, writepos); 1.39 - writepos = 0; 1.40 + cbuf = luaL_buffinitsize(L, &luabuf, outlen); 1.41 + outlen = 0; 1.42 // loop through the characters until encountering end quote: 1.43 while ((c = str[pos++]) != '"') { 1.44 - if (c == 0) { 1.45 - // handle unexpected end of JSON document: 1.46 - goto json_import_unexpected_eof; 1.47 - } else if (c < 32 || c == 127) { 1.48 + // NOTE: unexpected end cannot happen anymore 1.49 + if (c < 32 || c == 127) { 1.50 // do not allow ASCII control characters: 1.51 // NOTE: illegal UTF-8 sequences and extended control characters are not sanitized 1.52 // by this parser to allow different encodings than Unicode 1.53 @@ -336,18 +335,18 @@ 1.54 case '"': 1.55 case '/': 1.56 case '\\': 1.57 - cbuf[writepos++] = c; 1.58 + cbuf[outlen++] = c; 1.59 break; 1.60 // unescaping of backspace: 1.61 - case 'b': cbuf[writepos++] = '\b'; break; 1.62 + case 'b': cbuf[outlen++] = '\b'; break; 1.63 // unescaping of form-feed: 1.64 - case 'f': cbuf[writepos++] = '\f'; break; 1.65 + case 'f': cbuf[outlen++] = '\f'; break; 1.66 // unescaping of new-line: 1.67 - case 'n': cbuf[writepos++] = '\n'; break; 1.68 + case 'n': cbuf[outlen++] = '\n'; break; 1.69 // unescaping of carriage-return: 1.70 - case 'r': cbuf[writepos++] = '\r'; break; 1.71 + case 'r': cbuf[outlen++] = '\r'; break; 1.72 // unescaping of tabulator: 1.73 - case 't': cbuf[writepos++] = '\t'; break; 1.74 + case 't': cbuf[outlen++] = '\t'; break; 1.75 // unescaping of UTF-16 characters 1.76 case 'u': 1.77 lua_pushnil(L); 1.78 @@ -361,11 +360,11 @@ 1.79 } 1.80 } else { 1.81 // normal character: 1.82 - cbuf[writepos++] = c; 1.83 + cbuf[outlen++] = c; 1.84 } 1.85 } 1.86 // process buffer to Lua string: 1.87 - luaL_pushresultsize(&luabuf, writepos); 1.88 + luaL_pushresultsize(&luabuf, outlen); 1.89 } else { 1.90 // if JSON string is empty, 1.91 // push empty Lua string: