File tree 4 files changed +34
-5
lines changed
4 files changed +34
-5
lines changed Original file line number Diff line number Diff line change 22
22
23
23
#define hexdigit (x ) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9)
24
24
#define error_ptr (error ) ((void*)error)
25
- #define is_error (ptr ) ((unsigned long)ptr > (unsigned long)-4000L)
25
+ #define error_description (error ) (json_tokener_errors[error])
26
+ #define is_error (ptr ) (ptr == NULL)
26
27
27
28
#endif
Original file line number Diff line number Diff line change @@ -115,11 +115,27 @@ struct json_object* json_tokener_parse(const char *str)
115
115
tok = json_tokener_new ();
116
116
obj = json_tokener_parse_ex (tok , str , -1 );
117
117
if (tok -> err != json_tokener_success )
118
- obj = ( struct json_object * ) error_ptr ( - tok -> err ) ;
118
+ obj = NULL ;
119
119
json_tokener_free (tok );
120
120
return obj ;
121
121
}
122
122
123
+ struct json_object * json_tokener_parse_verbose (const char * str , enum json_tokener_error * error )
124
+ {
125
+ struct json_tokener * tok ;
126
+ struct json_object * obj ;
127
+
128
+ tok = json_tokener_new ();
129
+ obj = json_tokener_parse_ex (tok , str , -1 );
130
+ * error = tok -> err ;
131
+ if (tok -> err != json_tokener_success ) {
132
+ obj = NULL ;
133
+ }
134
+
135
+ json_tokener_free (tok );
136
+ return obj ;
137
+ }
138
+
123
139
124
140
#if !HAVE_STRNDUP
125
141
/* CAW: compliant version of strndup() */
Original file line number Diff line number Diff line change @@ -76,7 +76,7 @@ struct json_tokener
76
76
char * str ;
77
77
struct printbuf * pb ;
78
78
int depth , is_double , st_pos , char_offset ;
79
- ptrdiff_t err ;
79
+ enum json_tokener_error err ;
80
80
unsigned int ucs_char ;
81
81
char quote_char ;
82
82
struct json_tokener_srec stack [JSON_TOKENER_MAX_DEPTH ];
@@ -88,6 +88,7 @@ extern struct json_tokener* json_tokener_new(void);
88
88
extern void json_tokener_free (struct json_tokener * tok );
89
89
extern void json_tokener_reset (struct json_tokener * tok );
90
90
extern struct json_object * json_tokener_parse (const char * str );
91
+ extern struct json_object * json_tokener_parse_verbose (const char * str , enum json_tokener_error * error );
91
92
extern struct json_object * json_tokener_parse_ex (struct json_tokener * tok ,
92
93
const char * str , int len );
93
94
Original file line number Diff line number Diff line change 2
2
#include <stdlib.h>
3
3
#include <stddef.h>
4
4
#include <string.h>
5
+ #include <assert.h>
5
6
6
7
#include "json.h"
7
8
@@ -135,11 +136,21 @@ int main(int argc, char **argv)
135
136
printf ("new_obj.to_string()=%s\n" , json_object_to_json_string (new_obj ));
136
137
json_object_put (new_obj );
137
138
139
+ enum json_tokener_error error = json_tokener_success ;
140
+ new_obj = json_tokener_parse_verbose ("{ foo }" , & error );
141
+ assert (error == json_tokener_error_parse_object_key_name );
142
+ assert (new_obj == NULL );
143
+
138
144
new_obj = json_tokener_parse ("{ foo }" );
139
- if (is_error (new_obj )) printf ("got error as expected\n" );
145
+ assert (new_obj == NULL );
146
+
147
+ // if(is_error(new_obj)) printf("got error as expected\n");
140
148
141
149
new_obj = json_tokener_parse ("foo" );
142
- if (is_error (new_obj )) printf ("got error as expected\n" );
150
+ assert (new_obj == NULL );
151
+ new_obj = json_tokener_parse_verbose ("foo" , & error );
152
+ assert (new_obj == NULL );
153
+ assert (error == json_tokener_error_parse_boolean );
143
154
144
155
new_obj = json_tokener_parse ("{ \"foo" );
145
156
if (is_error (new_obj )) printf ("got error as expected\n" );
You can’t perform that action at this time.
0 commit comments