projects
/
jansson.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
013b8b3
)
Reduce code duplication in the decoder
author
Petri Lehtinen
<petri@digip.org>
Sun, 29 May 2011 09:53:25 +0000
(12:53 +0300)
committer
Petri Lehtinen
<petri@digip.org>
Sun, 29 May 2011 09:53:25 +0000
(12:53 +0300)
src/load.c
patch
|
blob
|
history
diff --git
a/src/load.c
b/src/load.c
index
98837a4
..
3dc8ac0
100644
(file)
--- a/
src/load.c
+++ b/
src/load.c
@@
-815,13
+815,26
@@
static json_t *parse_value(lex_t *lex, size_t flags, json_error_t *error)
static json_t *parse_json(lex_t *lex, size_t flags, json_error_t *error)
{
static json_t *parse_json(lex_t *lex, size_t flags, json_error_t *error)
{
+ json_t *result;
+
lex_scan(lex, error);
if(lex->token != '[' && lex->token != '{') {
error_set(error, lex, "'[' or '{' expected");
return NULL;
}
lex_scan(lex, error);
if(lex->token != '[' && lex->token != '{') {
error_set(error, lex, "'[' or '{' expected");
return NULL;
}
- return parse_value(lex, flags, error);
+ result = parse_value(lex, flags, error);
+ if(!result)
+ return NULL;
+
+ lex_scan(lex, error);
+ if(lex->token != TOKEN_EOF) {
+ error_set(error, lex, "end of file expected");
+ json_decref(result);
+ result = NULL;
+ }
+
+ return result;
}
typedef struct
}
typedef struct
@@
-857,19
+870,8
@@
json_t *json_loads(const char *string, size_t flags, json_error_t *error)
return NULL;
jsonp_error_init(error, "<string>");
return NULL;
jsonp_error_init(error, "<string>");
-
result = parse_json(&lex, flags, error);
result = parse_json(&lex, flags, error);
- if(!result)
- goto out;
-
- lex_scan(&lex, error);
- if(lex.token != TOKEN_EOF) {
- error_set(error, &lex, "end of file expected");
- json_decref(result);
- result = NULL;
- }
-out:
lex_close(&lex);
return result;
}
lex_close(&lex);
return result;
}
@@
-907,19
+909,8
@@
json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t
return NULL;
jsonp_error_init(error, "<buffer>");
return NULL;
jsonp_error_init(error, "<buffer>");
-
result = parse_json(&lex, flags, error);
result = parse_json(&lex, flags, error);
- if(!result)
- goto out;
- lex_scan(&lex, error);
- if(lex.token != TOKEN_EOF) {
- error_set(error, &lex, "end of file expected");
- json_decref(result);
- result = NULL;
- }
-
-out:
lex_close(&lex);
return result;
}
lex_close(&lex);
return result;
}
@@
-939,19
+930,8
@@
json_t *json_loadf(FILE *input, size_t flags, json_error_t *error)
source = "<stream>";
jsonp_error_init(error, source);
source = "<stream>";
jsonp_error_init(error, source);
-
result = parse_json(&lex, flags, error);
result = parse_json(&lex, flags, error);
- if(!result)
- goto out;
-
- lex_scan(&lex, error);
- if(lex.token != TOKEN_EOF) {
- error_set(error, &lex, "end of file expected");
- json_decref(result);
- result = NULL;
- }
-out:
lex_close(&lex);
return result;
}
lex_close(&lex);
return result;
}