json_t *result;
lex_scan(lex, error);
- if(lex->token != '[' && lex->token != '{') {
- error_set(error, lex, "'[' or '{' expected");
- return NULL;
+ if(!(flags & JSON_DECODE_ANY)) {
+ if(lex->token != '[' && lex->token != '{') {
+ error_set(error, lex, "'[' or '{' expected");
+ return NULL;
+ }
}
result = parse_value(lex, flags, error);
json_t *result;
string_data_t stream_data;
+ jsonp_error_init(error, "<string>");
+
+ if (string == NULL) {
+ error_set(error, NULL, "wrong arguments");
+ return NULL;
+ }
+
stream_data.data = string;
stream_data.pos = 0;
if(lex_init(&lex, string_get, (void *)&stream_data))
return NULL;
- jsonp_error_init(error, "<string>");
result = parse_json(&lex, flags, error);
lex_close(&lex);
json_t *result;
buffer_data_t stream_data;
+ jsonp_error_init(error, "<buffer>");
+
+ if (buffer == NULL) {
+ error_set(error, NULL, "wrong arguments");
+ return NULL;
+ }
+
stream_data.data = buffer;
stream_data.pos = 0;
stream_data.len = buflen;
if(lex_init(&lex, buffer_get, (void *)&stream_data))
return NULL;
- jsonp_error_init(error, "<buffer>");
result = parse_json(&lex, flags, error);
lex_close(&lex);
const char *source;
json_t *result;
- if(lex_init(&lex, (get_func)fgetc, input))
- return NULL;
-
if(input == stdin)
source = "<stdin>";
else
source = "<stream>";
jsonp_error_init(error, source);
+
+ if (input == NULL) {
+ error_set(error, NULL, "wrong arguments");
+ return NULL;
+ }
+
+ if(lex_init(&lex, (get_func)fgetc, input))
+ return NULL;
+
result = parse_json(&lex, flags, error);
lex_close(&lex);
jsonp_error_init(error, path);
+ if (path == NULL) {
+ error_set(error, NULL, "wrong arguments");
+ return NULL;
+ }
+
fp = fopen(path, "rb");
if(!fp)
{
json_decref(json);
}
+static void decode_any()
+{
+ json_t *json;
+ json_error_t error;
+
+ json = json_loads("\"foo\"", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_string(json))
+ fail("json_load decoded any failed - string");
+ json_decref(json);
+
+ json = json_loads("42", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_integer(json))
+ fail("json_load decoded any failed - integer");
+ json_decref(json);
+
+ json = json_loads("true", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_true(json))
+ fail("json_load decoded any failed - boolean");
+ json_decref(json);
+
+ json = json_loads("null", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_null(json))
+ fail("json_load decoded any failed - null");
+ json_decref(json);
+}
+
+ static void load_wrong_args()
+ {
+ json_t *json;
+ json_error_t error;
+
+ json = json_loads(NULL, 0, &error);
+ if (json)
+ fail("json_loads should return NULL if the first argument is NULL");
+
+ json = json_loadb(NULL, 0, 0, &error);
+ if (json)
+ fail("json_loadb should return NULL if the first argument is NULL");
+
+ json = json_loadf(NULL, 0, &error);
+ if (json)
+ fail("json_loadf should return NULL if the first argument is NULL");
+
+ json = json_load_file(NULL, 0, &error);
+ if (json)
+ fail("json_loadf should return NULL if the first argument is NULL");
+ }
+
static void run_tests()
{
file_not_found();
reject_duplicates();
disable_eof_check();
+ decode_any();
+ load_wrong_args();
}