diff options
Diffstat (limited to 'xs_json.h')
| -rw-r--r-- | xs_json.h | 7 |
1 files changed, 5 insertions, 2 deletions
| @@ -208,6 +208,7 @@ static xs_val *_xs_json_load_lexer(FILE *f, js_type *t) | |||
| 208 | { | 208 | { |
| 209 | int c; | 209 | int c; |
| 210 | xs_val *v = NULL; | 210 | xs_val *v = NULL; |
| 211 | int offset; | ||
| 211 | 212 | ||
| 212 | *t = JS_ERROR; | 213 | *t = JS_ERROR; |
| 213 | 214 | ||
| @@ -236,6 +237,7 @@ static xs_val *_xs_json_load_lexer(FILE *f, js_type *t) | |||
| 236 | *t = JS_STRING; | 237 | *t = JS_STRING; |
| 237 | 238 | ||
| 238 | v = xs_str_new(NULL); | 239 | v = xs_str_new(NULL); |
| 240 | offset = 0; | ||
| 239 | 241 | ||
| 240 | while ((c = fgetc(f)) != '"' && c != EOF && *t != JS_ERROR) { | 242 | while ((c = fgetc(f)) != '"' && c != EOF && *t != JS_ERROR) { |
| 241 | if (c == '\\') { | 243 | if (c == '\\') { |
| @@ -274,11 +276,12 @@ static xs_val *_xs_json_load_lexer(FILE *f, js_type *t) | |||
| 274 | break; | 276 | break; |
| 275 | } | 277 | } |
| 276 | 278 | ||
| 277 | v = xs_utf8_cat(v, cp); | 279 | v = xs_utf8_insert(v, cp, &offset); |
| 278 | } | 280 | } |
| 279 | else { | 281 | else { |
| 280 | char cc = c; | 282 | char cc = c; |
| 281 | v = xs_append_m(v, &cc, 1); | 283 | v = xs_insert_m(v, offset, &cc, 1); |
| 284 | offset++; | ||
| 282 | } | 285 | } |
| 283 | } | 286 | } |
| 284 | 287 | ||