Make macro json_object_object_foreach multiple-use safe
authorAlexander Klauer <Alexander.Klauer@itwm.fraunhofer.de>
Wed, 19 Dec 2012 09:31:39 +0000 (10:31 +0100)
committerAlexander Klauer <Alexander.Klauer@itwm.fraunhofer.de>
Wed, 19 Dec 2012 09:31:39 +0000 (10:31 +0100)
json_object.h

index 2621112..0ff6584 100644 (file)
@@ -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) \
        char *key; \
        struct json_object *val; \
-       for(struct lh_entry *entry = json_object_get_object(obj)->head, *entry_next = NULL; \
-               ({ if(entry) { \
-                       key = (char*)entry->k; \
-                       val = (struct json_object*)entry->v; \
-                       entry_next = entry->next; \
-               } ; entry; }); \
-               entry = entry_next )
+       for(struct lh_entry *entry ## key = json_object_get_object(obj)->head, *entry_next ## key = NULL; \
+               ({ if(entry ## key) { \
+                       key = (char*)entry ## key->k; \
+                       val = (struct json_object*)entry ## key->v; \
+                       entry_next ## key = entry ## key->next; \
+               } ; entry ## key; }); \
+               entry ## key = entry_next ## key )
 
 #else /* ANSI C or MSC */
 
 # define json_object_object_foreach(obj,key,val) \
        char *key;\
        struct json_object *val; \
-       struct lh_entry *entry; \
-       struct lh_entry *entry_next = NULL; \
-       for(entry = json_object_get_object(obj)->head; \
-               (entry ? ( \
-                       key = (char*)entry->k, \
-                       val = (struct json_object*)entry->v, \
-                       entry_next = entry->next, \
-                       entry) : 0); \
-               entry = entry_next)
+       struct lh_entry *entry ## key; \
+       struct lh_entry *entry_next ## key = NULL; \
+       for(entry ## key = json_object_get_object(obj)->head; \
+               (entry ## key ? ( \
+                       key = (char*)entry ## key->k, \
+                       val = (struct json_object*)entry ## key->v, \
+                       entry_next ## key = entry ## key->next, \
+                       entry ## key) : 0); \
+               entry ## key = entry_next ## key)
 
 #endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) */