]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/bus-map-properties: modernize map_basic() and bus_map_strv_sort()
authorMike Yuan <me@yhndnzj.com>
Thu, 19 Sep 2024 21:29:38 +0000 (23:29 +0200)
committerMike Yuan <me@yhndnzj.com>
Fri, 20 Sep 2024 20:44:35 +0000 (22:44 +0200)
src/shared/bus-map-properties.c

index a4833a5c1ee270f2d765e0c77e9d94ea042f8742..aa17ded5a31b33984c70da385ee713858023d359 100644 (file)
@@ -18,15 +18,10 @@ int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_err
 }
 
 int bus_map_strv_sort(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
-        _cleanup_strv_free_ char **l = NULL;
-        char ***p = userdata;
+        char ***p = ASSERT_PTR(userdata);
         int r;
 
-        r = sd_bus_message_read_strv_extend(m, &l);
-        if (r < 0)
-                return bus_log_parse_error_debug(r);
-
-        r = strv_extend_strv(p, l, false);
+        r = sd_bus_message_read_strv_extend(m, p);
         if (r < 0)
                 return bus_log_parse_error_debug(r);
 
@@ -34,10 +29,13 @@ int bus_map_strv_sort(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus
         return 0;
 }
 
-static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigned flags, sd_bus_error *error, void *userdata) {
+static int map_basic(sd_bus_message *m, unsigned flags, void *userdata) {
         char type;
         int r;
 
+        assert(m);
+        assert(userdata);
+
         r = sd_bus_message_peek_type(m, &type, NULL);
         if (r < 0)
                 return bus_log_parse_error_debug(r);
@@ -46,32 +44,29 @@ static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigne
 
         case SD_BUS_TYPE_STRING:
         case SD_BUS_TYPE_OBJECT_PATH: {
-                const char **p = userdata;
-                const char *s;
+                const char **p = userdata, *s;
 
                 r = sd_bus_message_read_basic(m, type, &s);
                 if (r < 0)
                         return bus_log_parse_error_debug(r);
 
-                if (isempty(s))
-                        s = NULL;
+                s = empty_to_null(s);
 
-                if (flags & BUS_MAP_STRDUP)
-                        return free_and_strdup((char **) userdata, s);
+                if (FLAGS_SET(flags, BUS_MAP_STRDUP))
+                        return free_and_strdup((char**) p, s);
 
                 *p = s;
                 return 0;
         }
 
         case SD_BUS_TYPE_ARRAY: {
-                _cleanup_strv_free_ char **l = NULL;
                 char ***p = userdata;
 
-                r = sd_bus_message_read_strv_extend(m, &l);
+                r = sd_bus_message_read_strv_extend(m, p);
                 if (r < 0)
                         return bus_log_parse_error_debug(r);
 
-                return strv_extend_strv(p, l, false);
+                return 0;
         }
 
         case SD_BUS_TYPE_BOOLEAN: {
@@ -91,40 +86,39 @@ static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigne
 
         case SD_BUS_TYPE_INT32:
         case SD_BUS_TYPE_UINT32: {
-                uint32_t u, *p = userdata;
+                uint32_t *p = userdata;
 
-                r = sd_bus_message_read_basic(m, type, &u);
+                r = sd_bus_message_read_basic(m, type, p);
                 if (r < 0)
                         return bus_log_parse_error_debug(r);
 
-                *p = u;
                 return 0;
         }
 
         case SD_BUS_TYPE_INT64:
         case SD_BUS_TYPE_UINT64: {
-                uint64_t t, *p = userdata;
+                uint64_t *p = userdata;
 
-                r = sd_bus_message_read_basic(m, type, &t);
+                r = sd_bus_message_read_basic(m, type, p);
                 if (r < 0)
                         return bus_log_parse_error_debug(r);
 
-                *p = t;
                 return 0;
         }
 
         case SD_BUS_TYPE_DOUBLE: {
-                double d, *p = userdata;
+                double *p = userdata;
 
-                r = sd_bus_message_read_basic(m, type, &d);
+                r = sd_bus_message_read_basic(m, type, p);
                 if (r < 0)
                         return bus_log_parse_error_debug(r);
 
-                *p = d;
                 return 0;
-        }}
+        }
 
-        return -EOPNOTSUPP;
+        default:
+                return -EOPNOTSUPP;
+        }
 }
 
 int bus_message_map_all_properties(
@@ -173,7 +167,7 @@ int bus_message_map_all_properties(
                         if (map[i].set)
                                 r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
                         else
-                                r = map_basic(sd_bus_message_get_bus(m), member, m, flags, error, v);
+                                r = map_basic(m, flags, v);
                         if (r < 0)
                                 return bus_log_parse_error_debug(r);