summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-01-09 10:33:59 +0100
committerThomas Haller <thaller@redhat.com>2018-01-16 14:49:54 +0100
commit85b7062ae273e401bab9200e8cbe8a068571bca9 (patch)
treeebe47705733c3719250e82f93e4615683fd52408
parent3b1044ebd6840cf040498d8c023ff594b1636e77 (diff)
downloadNetworkManager-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.c94
-rw-r--r--libnm-core/nm-json.h45
-rw-r--r--libnm-core/nm-utils.c8
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)));
}