#define hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9)
#define error_ptr(error) ((void*)error)
-#define is_error(ptr) ((unsigned long)ptr > (unsigned long)-4000L)
+#define error_description(error) (json_tokener_errors[error])
+#define is_error(ptr) (ptr == NULL)
#endif
tok = json_tokener_new();
obj = json_tokener_parse_ex(tok, str, -1);
if(tok->err != json_tokener_success)
- obj = (struct json_object*)error_ptr(-tok->err);
+ obj = NULL;
json_tokener_free(tok);
return obj;
}
+struct json_object* json_tokener_parse_verbose(const char *str, enum json_tokener_error *error)
+{
+ struct json_tokener* tok;
+ struct json_object* obj;
+
+ tok = json_tokener_new();
+ obj = json_tokener_parse_ex(tok, str, -1);
+ *error = tok->err;
+ if(tok->err != json_tokener_success) {
+ obj = NULL;
+ }
+
+ json_tokener_free(tok);
+ return obj;
+}
+
#if !HAVE_STRNDUP
/* CAW: compliant version of strndup() */
char *str;
struct printbuf *pb;
int depth, is_double, st_pos, char_offset;
- ptrdiff_t err;
+ enum json_tokener_error err;
unsigned int ucs_char;
char quote_char;
struct json_tokener_srec stack[JSON_TOKENER_MAX_DEPTH];
extern void json_tokener_free(struct json_tokener *tok);
extern void json_tokener_reset(struct json_tokener *tok);
extern struct json_object* json_tokener_parse(const char *str);
+extern struct json_object* json_tokener_parse_verbose(const char *str, enum json_tokener_error *error);
extern struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
const char *str, int len);
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
+#include <assert.h>
#include "json.h"
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);
+ enum json_tokener_error error = json_tokener_success;
+ new_obj = json_tokener_parse_verbose("{ foo }", &error);
+ assert (error == json_tokener_error_parse_object_key_name);
+ assert (new_obj == NULL);
+
new_obj = json_tokener_parse("{ foo }");
- if(is_error(new_obj)) printf("got error as expected\n");
+ assert (new_obj == NULL);
+
+ // if(is_error(new_obj)) printf("got error as expected\n");
new_obj = json_tokener_parse("foo");
- if(is_error(new_obj)) printf("got error as expected\n");
+ assert (new_obj == NULL);
+ new_obj = json_tokener_parse_verbose("foo", &error);
+ assert (new_obj == NULL);
+ assert (error == json_tokener_error_parse_boolean);
new_obj = json_tokener_parse("{ \"foo");
if(is_error(new_obj)) printf("got error as expected\n");