diff options
author | Thomas Haller <thaller@redhat.com> | 2018-01-09 10:33:59 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-01-16 14:49:54 +0100 |
commit | 85b7062ae273e401bab9200e8cbe8a068571bca9 (patch) | |
tree | ebe47705733c3719250e82f93e4615683fd52408 | |
parent | 3b1044ebd6840cf040498d8c023ff594b1636e77 (diff) | |
download | NetworkManager-85b7062ae273e401bab9200e8cbe8a068571bca9.tar.gz |
libnm: don't redefine symbols in jansson.h header
Redefining symbols before including <jansson.h> is confusing.
And almost not necessary, as we don't use any json_* symbols
directly.
The only remaining culprit are the foreach macros. Redefine them.
-rw-r--r-- | libnm-core/nm-json.c | 94 | ||||
-rw-r--r-- | libnm-core/nm-json.h | 45 | ||||
-rw-r--r-- | libnm-core/nm-utils.c | 8 |
3 files changed, 47 insertions, 100 deletions
diff --git a/libnm-core/nm-json.c b/libnm-core/nm-json.c index e9606ec1d8..1cca40ce5b 100644 --- a/libnm-core/nm-json.c +++ b/libnm-core/nm-json.c @@ -41,36 +41,36 @@ json_vt (void) #define TRY_BIND_SYMBOL(symbol) \ G_STMT_START { \ - void *_sym = dlsym (handle, "json" #symbol); \ + typeof (symbol) (*_sym) = dlsym (handle, #symbol); \ \ if (!_sym) \ goto fail_symbol; \ - vt->vt.nm_json ## symbol = _sym; \ + vt->vt.nm_##symbol = _sym; \ } G_STMT_END - TRY_BIND_SYMBOL (_array); - TRY_BIND_SYMBOL (_array_append_new); - TRY_BIND_SYMBOL (_array_get); - TRY_BIND_SYMBOL (_array_size); - TRY_BIND_SYMBOL (_delete); - TRY_BIND_SYMBOL (_dumps); - TRY_BIND_SYMBOL (_false); - TRY_BIND_SYMBOL (_integer); - TRY_BIND_SYMBOL (_integer_value); - TRY_BIND_SYMBOL (_loads); - TRY_BIND_SYMBOL (_object); - TRY_BIND_SYMBOL (_object_del); - TRY_BIND_SYMBOL (_object_get); - TRY_BIND_SYMBOL (_object_iter); - TRY_BIND_SYMBOL (_object_iter_key); - TRY_BIND_SYMBOL (_object_iter_next); - TRY_BIND_SYMBOL (_object_iter_value); - TRY_BIND_SYMBOL (_object_key_to_iter); - TRY_BIND_SYMBOL (_object_set_new); - TRY_BIND_SYMBOL (_object_size); - TRY_BIND_SYMBOL (_string); - TRY_BIND_SYMBOL (_string_value); - TRY_BIND_SYMBOL (_true); + TRY_BIND_SYMBOL (json_array); + TRY_BIND_SYMBOL (json_array_append_new); + TRY_BIND_SYMBOL (json_array_get); + TRY_BIND_SYMBOL (json_array_size); + TRY_BIND_SYMBOL (json_delete); + TRY_BIND_SYMBOL (json_dumps); + TRY_BIND_SYMBOL (json_false); + TRY_BIND_SYMBOL (json_integer); + TRY_BIND_SYMBOL (json_integer_value); + TRY_BIND_SYMBOL (json_loads); + TRY_BIND_SYMBOL (json_object); + TRY_BIND_SYMBOL (json_object_del); + TRY_BIND_SYMBOL (json_object_get); + TRY_BIND_SYMBOL (json_object_iter); + TRY_BIND_SYMBOL (json_object_iter_key); + TRY_BIND_SYMBOL (json_object_iter_next); + TRY_BIND_SYMBOL (json_object_iter_value); + TRY_BIND_SYMBOL (json_object_key_to_iter); + TRY_BIND_SYMBOL (json_object_set_new); + TRY_BIND_SYMBOL (json_object_size); + TRY_BIND_SYMBOL (json_string); + TRY_BIND_SYMBOL (json_string_value); + TRY_BIND_SYMBOL (json_true); vt->vt.loaded = TRUE; vt->dl_handle = handle; @@ -105,47 +105,3 @@ out: nm_assert (vt && vt == g_atomic_pointer_get (&vt_ptr)); return &vt->vt; } - -#define DEF_FCN(name, rval, args_t, args_v) \ -rval name args_t \ -{ \ - const NMJsonVt *vt = nm_json_vt (); \ - \ - nm_assert (vt && vt->loaded && vt->name); \ - nm_assert (vt->name != name); \ - return (vt->name) args_v; \ -} - -#define DEF_VOI(name, args_t, args_v) \ -void name args_t \ -{ \ - const NMJsonVt *vt = nm_json_vt (); \ - \ - nm_assert (vt && vt->loaded && vt->name); \ - nm_assert (vt->name != name); \ - (vt->name) args_v; \ -} - -DEF_FCN (nm_json_array, json_t *, (void), ()); -DEF_FCN (nm_json_array_append_new, int, (json_t *json, json_t *value), (json, value)); -DEF_FCN (nm_json_array_get, json_t *, (const json_t *json, size_t index), (json, index)); -DEF_FCN (nm_json_array_size, size_t, (const json_t *json), (json)); -DEF_VOI (nm_json_delete, (json_t *json), (json)); -DEF_FCN (nm_json_dumps, char *, (const json_t *json, size_t flags), (json, flags)); -DEF_FCN (nm_json_false, json_t *, (void), ()); -DEF_FCN (nm_json_integer, json_t *, (json_int_t value), (value)); -DEF_FCN (nm_json_integer_value, json_int_t, (const json_t *json), (json)); -DEF_FCN (nm_json_loads, json_t *, (const char *string, size_t flags, json_error_t *error), (string, flags, error)); -DEF_FCN (nm_json_object, json_t *, (void), ()); -DEF_FCN (nm_json_object_del, int, (json_t *json, const char *key), (json, key)); -DEF_FCN (nm_json_object_get, json_t *, (const json_t *json, const char *key), (json, key)); -DEF_FCN (nm_json_object_iter, void *, (json_t *json), (json)); -DEF_FCN (nm_json_object_iter_key, const char *, (void *iter), (iter)); -DEF_FCN (nm_json_object_iter_next, void *, (json_t *json, void *iter), (json, iter)); -DEF_FCN (nm_json_object_iter_value, json_t *, (void *iter), (iter)); -DEF_FCN (nm_json_object_key_to_iter, void *, (const char *key), (key)); -DEF_FCN (nm_json_object_set_new, int, (json_t *json, const char *key, json_t *value), (json, key, value)); -DEF_FCN (nm_json_object_size, size_t, (const json_t *json), (json)); -DEF_FCN (nm_json_string, json_t *, (const char *value), (value)); -DEF_FCN (nm_json_string_value, const char *, (const json_t *json), (json)); -DEF_FCN (nm_json_true, json_t *, (void), ()); diff --git a/libnm-core/nm-json.h b/libnm-core/nm-json.h index 6f530583e4..c6c739e9d5 100644 --- a/libnm-core/nm-json.h +++ b/libnm-core/nm-json.h @@ -18,30 +18,6 @@ #ifndef __NM_JSON_H__ #define __NM_JSON_H__ -#define json_array nm_json_array -#define json_array_append_new nm_json_array_append_new -#define json_array_get nm_json_array_get -#define json_array_size nm_json_array_size -#define json_delete nm_json_delete -#define json_dumps nm_json_dumps -#define json_false nm_json_false -#define json_integer nm_json_integer -#define json_integer_value nm_json_integer_value -#define json_loads nm_json_loads -#define json_object nm_json_object -#define json_object_del nm_json_object_del -#define json_object_get nm_json_object_get -#define json_object_iter nm_json_object_iter -#define json_object_iter_key nm_json_object_iter_key -#define json_object_iter_next nm_json_object_iter_next -#define json_object_iter_value nm_json_object_iter_value -#define json_object_key_to_iter nm_json_object_key_to_iter -#define json_object_set_new nm_json_object_set_new -#define json_object_size nm_json_object_size -#define json_string nm_json_string -#define json_string_value nm_json_string_value -#define json_true nm_json_true - #include "nm-utils/nm-jansson.h" typedef struct { @@ -106,8 +82,23 @@ nm_json_decref (const NMJsonVt *vt, json_t *json) #define nm_json_is_array(json) json_is_array (json) #define nm_json_is_true(json) json_is_true (json) #define nm_json_boolean_value(json) json_boolean_value (json) -#define nm_json_array_foreach(a, b, c) json_array_foreach (a, b, c) -#define nm_json_object_foreach(a, b, c) json_object_foreach (a, b, c) -#define nm_json_object_foreach_safe(a, b, c, d) json_object_foreach_safe (a, b, c, d) + +#define nm_json_array_foreach(vt, array, index, value) \ + for(index = 0; \ + index < vt->nm_json_array_size (array) && (value = vt->nm_json_array_get (array, index)); \ + index++) + +#define nm_json_object_foreach(vt, object, key, value) \ + for(key = vt->nm_json_object_iter_key (vt->nm_json_object_iter (object)); \ + key && (value = vt->nm_json_object_iter_value (vt->nm_json_object_key_to_iter (key))); \ + key = vt->nm_json_object_iter_key (vt->nm_json_object_iter_next (object, vt->nm_json_object_key_to_iter (key)))) + +#define nm_json_object_foreach_safe(vt, object, n, key, value) \ + for(key = vt->nm_json_object_iter_key (vt->nm_json_object_iter (object)), \ + n = vt->nm_json_object_iter_next (object, vt->nm_json_object_key_to_iter (key)); \ + key && (value = vt->nm_json_object_iter_value (vt->nm_json_object_key_to_iter (key))); \ + key = vt->nm_json_object_iter_key (n), \ + n = vt->nm_json_object_iter_next (object, vt->nm_json_object_key_to_iter (key))) + #endif /* __NM_JSON_H__ */ diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 3e290e6b9f..a65cb92405 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -5210,7 +5210,7 @@ _nm_utils_team_link_watcher_from_json (const NMJsonVt *vt, json_t *json_element) g_return_val_if_fail (json_element, NULL); - nm_json_object_foreach (json_element, j_key, j_val) { + nm_json_object_foreach (vt, json_element, j_key, j_val) { if (nm_streq (j_key, "name")) { g_free (name); name = strdup (vt->nm_json_string_value (j_val)); @@ -5413,7 +5413,7 @@ _nm_utils_team_config_equal (const char *conf1, /* Only consider a given subset of nodes, others can change depending on * current state */ for (i = 0, json = json1; i < 2; i++, json = json2) { - nm_json_object_foreach_safe (json, tmp, key, value) { + nm_json_object_foreach_safe (vt, json, tmp, key, value) { if (!NM_IN_STRSET (key, "runner", "link_watch")) vt->nm_json_object_del (json, key); } @@ -5498,7 +5498,7 @@ _nm_utils_team_config_get (const char *conf, json_t *j_watcher; int index; - nm_json_array_foreach (json_element, index, j_watcher) { + nm_json_array_foreach (vt, json_element, index, j_watcher) { watcher = _nm_utils_team_link_watcher_from_json (vt, j_watcher); if (watcher) g_ptr_array_add (data, watcher); @@ -5519,7 +5519,7 @@ _nm_utils_team_config_get (const char *conf, json_t *str_element; int index; - nm_json_array_foreach (json_element, index, str_element) { + nm_json_array_foreach (vt, json_element, index, str_element) { if (nm_json_is_string (str_element)) g_ptr_array_add (data, g_strdup (vt->nm_json_string_value (str_element))); } |