From 8519fe88c9fc6a3e217148fd2edd8d815269ec8a Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Tue, 22 May 2018 10:48:18 -0300 Subject: [PATCH] lib: import new JSON iteration macro Save a few lines when iterating over JSON objects using the new JSON_FOREACH macro. Signed-off-by: Rafael Zalamena --- .clang-format | 1 + lib/json.h | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/.clang-format b/.clang-format index cc5a95baf6..3c6a2784ce 100644 --- a/.clang-format +++ b/.clang-format @@ -43,6 +43,7 @@ ForEachMacros: - SPLAY_FOREACH - FOR_ALL_INTERFACES - FOR_ALL_INTERFACES_ADDRESSES + - JSON_FOREACH # zebra - RE_DEST_FOREACH_ROUTE - RE_DEST_FOREACH_ROUTE_SAFE diff --git a/lib/json.h b/lib/json.h index 675d852af7..788d1d6efa 100644 --- a/lib/json.h +++ b/lib/json.h @@ -23,6 +23,20 @@ #if defined(HAVE_JSON_C_JSON_H) #include + +/* + * FRR style JSON iteration. + * Usage: JSON_FOREACH(...) { ... } + */ +#define JSON_FOREACH(jo, joi, join) \ + /* struct json_object *jo; */ \ + /* struct json_object_iterator joi; */ \ + /* struct json_object_iterator join; */ \ + for ((joi) = json_object_iter_begin((jo)), \ + (join) = json_object_iter_end((jo)); \ + json_object_iter_equal(&(joi), &(join)) == 0; \ + json_object_iter_next(&(joi))) + #else #include