Make macro json_object_object_foreach multiple-use safe
This commit is contained in:
@@ -305,28 +305,28 @@ extern void json_object_object_del(struct json_object* obj, const char *key);
|
|||||||
# define json_object_object_foreach(obj,key,val) \
|
# define json_object_object_foreach(obj,key,val) \
|
||||||
char *key; \
|
char *key; \
|
||||||
struct json_object *val; \
|
struct json_object *val; \
|
||||||
for(struct lh_entry *entry = json_object_get_object(obj)->head, *entry_next = NULL; \
|
for(struct lh_entry *entry ## key = json_object_get_object(obj)->head, *entry_next ## key = NULL; \
|
||||||
({ if(entry) { \
|
({ if(entry ## key) { \
|
||||||
key = (char*)entry->k; \
|
key = (char*)entry ## key->k; \
|
||||||
val = (struct json_object*)entry->v; \
|
val = (struct json_object*)entry ## key->v; \
|
||||||
entry_next = entry->next; \
|
entry_next ## key = entry ## key->next; \
|
||||||
} ; entry; }); \
|
} ; entry ## key; }); \
|
||||||
entry = entry_next )
|
entry ## key = entry_next ## key )
|
||||||
|
|
||||||
#else /* ANSI C or MSC */
|
#else /* ANSI C or MSC */
|
||||||
|
|
||||||
# define json_object_object_foreach(obj,key,val) \
|
# define json_object_object_foreach(obj,key,val) \
|
||||||
char *key;\
|
char *key;\
|
||||||
struct json_object *val; \
|
struct json_object *val; \
|
||||||
struct lh_entry *entry; \
|
struct lh_entry *entry ## key; \
|
||||||
struct lh_entry *entry_next = NULL; \
|
struct lh_entry *entry_next ## key = NULL; \
|
||||||
for(entry = json_object_get_object(obj)->head; \
|
for(entry ## key = json_object_get_object(obj)->head; \
|
||||||
(entry ? ( \
|
(entry ## key ? ( \
|
||||||
key = (char*)entry->k, \
|
key = (char*)entry ## key->k, \
|
||||||
val = (struct json_object*)entry->v, \
|
val = (struct json_object*)entry ## key->v, \
|
||||||
entry_next = entry->next, \
|
entry_next ## key = entry ## key->next, \
|
||||||
entry) : 0); \
|
entry ## key) : 0); \
|
||||||
entry = entry_next)
|
entry ## key = entry_next ## key)
|
||||||
|
|
||||||
#endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) */
|
#endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user