]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
json: simplify JSON_VARIANT_OBJECT_FOREACH() macro a bit
authorLennart Poettering <lennart@poettering.net>
Thu, 4 Apr 2019 14:40:02 +0000 (16:40 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 12 Apr 2019 11:11:11 +0000 (13:11 +0200)
There's no point in returning the "key" within each loop iteration as
JsonVariant object. Let's simplify things and return it as string. That
simplifies usage (since the caller doesn't have to convert the object to
the string anymore) and is safe since we already validate that keys are
strings when an object JsonVariant is allocated.

src/nspawn/nspawn-oci.c
src/shared/json.h

index db8e4d3b78ad73fcc3bde9eac93e9f6ad05e800c..6040243899b38084ebf2e8f5feeb4c3da3ca34e3 100644 (file)
@@ -1621,26 +1621,26 @@ static bool sysctl_key_valid(const char *s) {
 
 static int oci_sysctl(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
         Settings *s = userdata;
-        JsonVariant *k, *w;
+        JsonVariant *w;
+        const char *k;
         int r;
 
         assert(s);
 
         JSON_VARIANT_OBJECT_FOREACH(k, w, v) {
-                const char *n, *m;
+                const char *m;
 
                 if (!json_variant_is_string(w))
                         return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
                                         "sysctl parameter is not a string, refusing.");
 
-                assert_se(n = json_variant_string(k));
                 assert_se(m = json_variant_string(w));
 
-                if (sysctl_key_valid(n))
+                if (sysctl_key_valid(k))
                         return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
-                                        "sysctl key invalid, refusing: %s", n);
+                                        "sysctl key invalid, refusing: %s", k);
 
-                r = strv_extend_strv(&s->sysctl, STRV_MAKE(n, m), false);
+                r = strv_extend_strv(&s->sysctl, STRV_MAKE(k, m), false);
                 if (r < 0)
                         return log_oom();
         }
@@ -2171,22 +2171,20 @@ static int oci_hooks(const char *name, JsonVariant *v, JsonDispatchFlags flags,
 }
 
 static int oci_annotations(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
-        JsonVariant *k, *w;
+        JsonVariant *w;
+        const char *k;
 
         JSON_VARIANT_OBJECT_FOREACH(k, w, v) {
-                const char *n;
-
-                assert_se(n = json_variant_string(k));
 
-                if (isempty(n))
-                        return json_log(k, flags, SYNTHETIC_ERRNO(EINVAL),
+                if (isempty(k))
+                        return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
                                         "Annotation with empty key, refusing.");
 
                 if (!json_variant_is_string(w))
                         return json_log(w, flags, SYNTHETIC_ERRNO(EINVAL),
                                         "Annotation has non-string value, refusing.");
 
-                json_log(k, flags|JSON_DEBUG, 0, "Ignoring annotation '%s' with value '%s'.", n, json_variant_string(w));
+                json_log(w, flags|JSON_DEBUG, 0, "Ignoring annotation '%s' with value '%s'.", k, json_variant_string(w));
         }
 
         return 0;
index e5532c506ec71d3a7a47ba81c523283613d07ef1..675ce2091ed031fdeb13c36530c24d3e424aa782 100644 (file)
@@ -143,7 +143,7 @@ struct json_variant_foreach_state {
 #define JSON_VARIANT_OBJECT_FOREACH(k, e, v)                            \
         for (struct json_variant_foreach_state _state = { (v), 0 };     \
              _state.idx < json_variant_elements(_state.variant) &&      \
-                     ({ k = json_variant_by_index(_state.variant, _state.idx); \
+                     ({ k = json_variant_string(json_variant_by_index(_state.variant, _state.idx)); \
                              e = json_variant_by_index(_state.variant, _state.idx + 1); \
                              true; });                                  \
              _state.idx += 2)