]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: Remove strv_from_stdarg_alloca()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 5 May 2025 10:42:08 +0000 (12:42 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 6 May 2025 15:40:01 +0000 (17:40 +0200)
It's trivial to replace all uses of this function with STRV_MAKE()
and strv_new_ap() so let's get rid of this variant.

26 files changed:
src/basic/strv.h
src/libsystemd/sd-bus/bus-objects.c
src/login/logind-button.c
src/login/logind-dbus.c
src/login/logind-dbus.h
src/login/logind-device.c
src/login/logind-inhibit.c
src/login/logind-seat-dbus.c
src/login/logind-seat-dbus.h
src/login/logind-seat.c
src/login/logind-session-dbus.c
src/login/logind-session-dbus.h
src/login/logind-session.c
src/login/logind-user-dbus.c
src/login/logind-user-dbus.h
src/network/networkd-dhcp-server-bus.c
src/network/networkd-dhcp4-bus.c
src/network/networkd-dhcp6-bus.c
src/network/networkd-link-bus.c
src/network/networkd-link-bus.h
src/network/networkd-link.c
src/resolve/resolved-bus.c
src/resolve/resolved-bus.h
src/shared/exec-util.c
src/shared/exec-util.h
src/test/test-strv.c

index 24bdd47cc58a3b3f8ef6ed2d61e98674a90ca460..0f2c251fe106bbbeffad2df36d60aa784f8ca1de 100644 (file)
@@ -183,35 +183,6 @@ char* endswith_strv(const char *s, char * const *l);
 #define ENDSWITH_SET(p, ...)                                    \
         endswith_strv(p, STRV_MAKE(__VA_ARGS__))
 
-#define strv_from_stdarg_alloca(first)                          \
-        ({                                                      \
-                char **_l;                                      \
-                                                                \
-                if (!first)                                     \
-                        _l = (char**) &first;                   \
-                else {                                          \
-                        size_t _n;                              \
-                        va_list _ap;                            \
-                                                                \
-                        _n = 1;                                 \
-                        va_start(_ap, first);                   \
-                        while (va_arg(_ap, char*))              \
-                                _n++;                           \
-                        va_end(_ap);                            \
-                                                                \
-                        _l = newa(char*, _n+1);                 \
-                        _l[_n = 0] = (char*) first;             \
-                        va_start(_ap, first);                   \
-                        for (;;) {                              \
-                                _l[++_n] = va_arg(_ap, char*);  \
-                                if (!_l[_n])                    \
-                                        break;                  \
-                        }                                       \
-                        va_end(_ap);                            \
-                }                                               \
-                _l;                                             \
-        })
-
 #define STR_IN_SET(x, ...) strv_contains(STRV_MAKE(__VA_ARGS__), x)
 #define STRPTR_IN_SET(x, ...)                                    \
         ({                                                       \
index 37f9495138f8c6def073f1102b3735688163e809..e7ec43a19d943127bd4be23f15a4774ba2c339e2 100644 (file)
@@ -2328,7 +2328,7 @@ _public_ int sd_bus_emit_properties_changed(
                 const char *interface,
                 const char *name, ...)  {
 
-        char **names;
+        _cleanup_strv_free_ char **names = NULL;
 
         assert_return(bus, -EINVAL);
         assert_return(bus = bus_resolve(bus), -ENOPKG);
@@ -2342,7 +2342,14 @@ _public_ int sd_bus_emit_properties_changed(
         if (!name)
                 return 0;
 
-        names = strv_from_stdarg_alloca(name);
+        va_list ap;
+
+        va_start(ap, name);
+        names = strv_new_ap(name, ap);
+        va_end(ap);
+
+        if (!names)
+                return -ENOMEM;
 
         return sd_bus_emit_properties_changed_strv(bus, path, interface, names);
 }
@@ -2927,7 +2934,7 @@ _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, ch
 }
 
 _public_ int sd_bus_emit_interfaces_added(sd_bus *bus, const char *path, const char *interface, ...) {
-        char **interfaces;
+        _cleanup_strv_free_ char **interfaces = NULL;
 
         assert_return(bus, -EINVAL);
         assert_return(bus = bus_resolve(bus), -ENOPKG);
@@ -2937,7 +2944,14 @@ _public_ int sd_bus_emit_interfaces_added(sd_bus *bus, const char *path, const c
         if (!BUS_IS_OPEN(bus->state))
                 return -ENOTCONN;
 
-        interfaces = strv_from_stdarg_alloca(interface);
+        va_list ap;
+
+        va_start(ap, interface);
+        interfaces = strv_new_ap(interface, ap);
+        va_end(ap);
+
+        if (!interfaces)
+                return -ENOMEM;
 
         return sd_bus_emit_interfaces_added_strv(bus, path, interfaces);
 }
@@ -2981,7 +2995,7 @@ _public_ int sd_bus_emit_interfaces_removed_strv(sd_bus *bus, const char *path,
 }
 
 _public_ int sd_bus_emit_interfaces_removed(sd_bus *bus, const char *path, const char *interface, ...) {
-        char **interfaces;
+        _cleanup_strv_free_ char **interfaces = NULL;
 
         assert_return(bus, -EINVAL);
         assert_return(bus = bus_resolve(bus), -ENOPKG);
@@ -2991,7 +3005,14 @@ _public_ int sd_bus_emit_interfaces_removed(sd_bus *bus, const char *path, const
         if (!BUS_IS_OPEN(bus->state))
                 return -ENOTCONN;
 
-        interfaces = strv_from_stdarg_alloca(interface);
+        va_list ap;
+
+        va_start(ap, interface);
+        interfaces = strv_new_ap(interface, ap);
+        va_end(ap);
+
+        if (!interfaces)
+                return -ENOMEM;
 
         return sd_bus_emit_interfaces_removed_strv(bus, path, interfaces);
 }
index 4d4853b570a6a290a3800304600ef74e0428c442..29ee3e968ba93165ce0e8d995249d7b04c5dd0a4 100644 (file)
@@ -414,7 +414,7 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
                         b->lid_closed = true;
                         button_lid_switch_handle_action(b->manager, /* is_edge= */ true, b->seat);
                         button_install_check_event_source(b);
-                        manager_send_changed(b->manager, "LidClosed", NULL);
+                        manager_send_changed(b->manager, "LidClosed");
 
                 } else if (ev.code == SW_DOCK) {
                         log_struct(LOG_INFO,
@@ -433,7 +433,7 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
 
                         b->lid_closed = false;
                         b->check_event_source = sd_event_source_unref(b->check_event_source);
-                        manager_send_changed(b->manager, "LidClosed", NULL);
+                        manager_send_changed(b->manager, "LidClosed");
 
                 } else if (ev.code == SW_DOCK) {
                         log_struct(LOG_INFO,
@@ -617,7 +617,7 @@ int button_check_switches(Button *b) {
 
         b->lid_closed = bitset_get(switches, SW_LID);
         b->docked = bitset_get(switches, SW_DOCK);
-        manager_send_changed(b->manager, "LidClosed", NULL);
+        manager_send_changed(b->manager, "LidClosed");
 
         if (b->lid_closed)
                 button_install_check_event_source(b);
index a7fc968facfe625f071c1933cd0b1a8c93c2b604..b1062cbf09071fb759143502b2d1d1a71765ff67 100644 (file)
@@ -2570,7 +2570,7 @@ static void reset_scheduled_shutdown(Manager *m) {
 
         (void) unlink(SHUTDOWN_SCHEDULE_FILE);
 
-        manager_send_changed(m, "ScheduledShutdown", NULL);
+        manager_send_changed(m, "ScheduledShutdown");
 }
 
 static int update_schedule_file(Manager *m) {
@@ -2841,7 +2841,7 @@ static int method_schedule_shutdown(sd_bus_message *message, void *userdata, sd_
                 return r;
         }
 
-        manager_send_changed(m, "ScheduledShutdown", NULL);
+        manager_send_changed(m, "ScheduledShutdown");
 
         return sd_bus_reply_method_return(message, NULL);
 }
@@ -4520,18 +4520,14 @@ int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error
         return 0;
 }
 
-int manager_send_changed(Manager *manager, const char *property, ...) {
-        char **l;
-
+int manager_send_changed_strv(Manager *manager, char **properties) {
         assert(manager);
 
-        l = strv_from_stdarg_alloca(property);
-
         return sd_bus_emit_properties_changed_strv(
                         manager->bus,
                         "/org/freedesktop/login1",
                         "org.freedesktop.login1.Manager",
-                        l);
+                        properties);
 }
 
 int manager_start_scope(
index 0cf39c4ae5c485da402a7704a508a31de85fd458..3b12ee860fb856198968b23d806984b9a7c47564 100644 (file)
@@ -25,7 +25,8 @@ int match_unit_removed(sd_bus_message *message, void *userdata, sd_bus_error *er
 int match_properties_changed(sd_bus_message *message, void *userdata, sd_bus_error *error);
 int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error);
 
-int manager_send_changed(Manager *manager, const char *property, ...) _sentinel_;
+int manager_send_changed_strv(Manager *manager, char **properties);
+#define manager_send_changed(manager, ...) manager_send_changed_strv(manager, STRV_MAKE(__VA_ARGS__))
 
 int manager_start_scope(
                 Manager *manager,
index 5f6b58b84022814c37277ef308943c70241ce444..4314790d97dd5e2c9dcf7e42faffef09e4d30333 100644 (file)
@@ -53,7 +53,7 @@ static void device_detach(Device *d) {
 
         if (!seat_has_master_device(s)) {
                 seat_add_to_gc_queue(s);
-                seat_send_changed(s, "CanGraphical", NULL);
+                seat_send_changed(s, "CanGraphical");
         }
 }
 
@@ -102,6 +102,6 @@ void device_attach(Device *d, Seat *s) {
 
         if (!had_master && d->master && s->started) {
                 seat_save(s);
-                seat_send_changed(s, "CanGraphical", NULL);
+                seat_send_changed(s, "CanGraphical");
         }
 }
index 86bae8f0b7cedf7c6277e0d6c392adfed3ba7206..e5070ff5738c1499919a89f87b321dc9cad4c122 100644 (file)
@@ -168,7 +168,7 @@ static int bus_manager_send_inhibited_change(Inhibitor *i) {
 
         property = IN_SET(i->mode, INHIBIT_BLOCK, INHIBIT_BLOCK_WEAK) ? "BlockInhibited" : "DelayInhibited";
 
-        return manager_send_changed(i->manager, property, NULL);
+        return manager_send_changed(i->manager, property);
 }
 
 int inhibitor_start(Inhibitor *i) {
index 31897b8c194be01d4dc927b01e717df428506fcd..4214d7cbde1dfd3531a20d2928ff58b50303aba3 100644 (file)
@@ -381,9 +381,8 @@ int seat_send_signal(Seat *s, bool new_seat) {
                         "so", s->id, p);
 }
 
-int seat_send_changed(Seat *s, const char *properties, ...) {
+int seat_send_changed_strv(Seat *s, char **properties) {
         _cleanup_free_ char *p = NULL;
-        char **l;
 
         assert(s);
 
@@ -394,9 +393,7 @@ int seat_send_changed(Seat *s, const char *properties, ...) {
         if (!p)
                 return -ENOMEM;
 
-        l = strv_from_stdarg_alloca(properties);
-
-        return sd_bus_emit_properties_changed_strv(s->manager->bus, p, "org.freedesktop.login1.Seat", l);
+        return sd_bus_emit_properties_changed_strv(s->manager->bus, p, "org.freedesktop.login1.Seat", properties);
 }
 
 static const sd_bus_vtable seat_vtable[] = {
index 782ee01c60a1f3b2c642bfc4ec1a1bf6e8ab5062..5b4e6846178285b51ac46e01d0b95cbf347edcc3 100644 (file)
@@ -13,6 +13,7 @@ extern const BusObjectImplementation seat_object;
 char* seat_bus_path(Seat *s);
 
 int seat_send_signal(Seat *s, bool new_seat);
-int seat_send_changed(Seat *s, const char *properties, ...) _sentinel_;
+int seat_send_changed_strv(Seat *s, char **properties);
+#define seat_send_changed(s, ...) seat_send_changed_strv(s, STRV_MAKE(__VA_ARGS__))
 
 int bus_seat_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error);
index 285c9b418db73021a59c19a19db0801e7e842751..2c0905e64df008f05dee6b7cd5b5c84588021f0b 100644 (file)
@@ -251,18 +251,18 @@ int seat_set_active(Seat *s, Session *session) {
 
         if (old_active) {
                 session_device_pause_all(old_active);
-                session_send_changed(old_active, "Active", NULL);
+                session_send_changed(old_active, "Active");
         }
 
         (void) seat_apply_acls(s, old_active);
 
         if (session && session->started) {
-                session_send_changed(session, "Active", NULL);
+                session_send_changed(session, "Active");
                 session_device_resume_all(session);
         }
 
         if (!session || session->started)
-                seat_send_changed(s, "ActiveSession", NULL);
+                seat_send_changed(s, "ActiveSession");
 
         if (session) {
                 session_save(session);
index a7e4b7c861fce678c69aa2d9648ab0634745d3dc..f3fe877a2c16db27671c686382ffc9a06a86216e 100644 (file)
@@ -847,9 +847,8 @@ int session_send_signal(Session *s, bool new_session) {
                         "so", s->id, p);
 }
 
-int session_send_changed(Session *s, const char *properties, ...) {
+int session_send_changed_strv(Session *s, char **properties) {
         _cleanup_free_ char *p = NULL;
-        char **l;
 
         assert(s);
 
@@ -860,9 +859,7 @@ int session_send_changed(Session *s, const char *properties, ...) {
         if (!p)
                 return -ENOMEM;
 
-        l = strv_from_stdarg_alloca(properties);
-
-        return sd_bus_emit_properties_changed_strv(s->manager->bus, p, "org.freedesktop.login1.Session", l);
+        return sd_bus_emit_properties_changed_strv(s->manager->bus, p, "org.freedesktop.login1.Session", properties);
 }
 
 int session_send_lock(Session *s, bool lock) {
index 175e29a93fcf5036cdcb0c66a1d51d4f3e9eb572..4ff45cb54f76042736570bf2cb73bea031a754a1 100644 (file)
@@ -14,7 +14,8 @@ extern const BusObjectImplementation session_object;
 char* session_bus_path(Session *s);
 
 int session_send_signal(Session *s, bool new_session);
-int session_send_changed(Session *s, const char *properties, ...) _sentinel_;
+int session_send_changed_strv(Session *s, char **properties);
+#define session_send_changed(s, ...) session_send_changed_strv(s, STRV_MAKE(__VA_ARGS__))
 int session_send_lock(Session *s, bool lock);
 int session_send_lock_all(Manager *m, bool lock);
 
index 2ca5a3716d6d66911fe0027de83507f510909510..a540774ccaf0caf583ab1d7c6d6850ecf5f09c4d 100644 (file)
@@ -882,10 +882,10 @@ int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error) {
 
         /* Send signals */
         session_send_signal(s, true);
-        user_send_changed(s->user, "Display", NULL);
+        user_send_changed(s->user, "Display");
 
         if (s->seat && s->seat->active == s)
-                (void) seat_send_changed(s->seat, "ActiveSession", NULL);
+                (void) seat_send_changed(s->seat, "ActiveSession");
 
         return 0;
 }
@@ -1017,7 +1017,7 @@ int session_finalize(Session *s) {
         session_reset_leader(s, /* keep_fdstore = */ false);
 
         (void) user_save(s->user);
-        (void) user_send_changed(s->user, "Display", NULL);
+        (void) user_send_changed(s->user, "Display");
 
         return 0;
 }
@@ -1163,13 +1163,13 @@ int session_set_idle_hint(Session *s, bool b) {
         s->idle_hint = b;
         dual_timestamp_now(&s->idle_hint_timestamp);
 
-        session_send_changed(s, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic", NULL);
+        session_send_changed(s, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic");
 
         if (s->seat)
-                seat_send_changed(s->seat, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic", NULL);
+                seat_send_changed(s->seat, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic");
 
-        user_send_changed(s->user, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic", NULL);
-        manager_send_changed(s->manager, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic", NULL);
+        user_send_changed(s->user, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic");
+        manager_send_changed(s->manager, "IdleHint", "IdleSinceHint", "IdleSinceHintMonotonic");
 
         return 1;
 }
@@ -1191,7 +1191,7 @@ int session_set_locked_hint(Session *s, bool b) {
 
         s->locked_hint = b;
         (void) session_save(s);
-        (void) session_send_changed(s, "LockedHint", NULL);
+        (void) session_send_changed(s, "LockedHint");
 
         return 1;
 }
@@ -1204,7 +1204,7 @@ void session_set_type(Session *s, SessionType t) {
 
         s->type = t;
         (void) session_save(s);
-        (void) session_send_changed(s, "Type", NULL);
+        (void) session_send_changed(s, "Type");
 }
 
 void session_set_class(Session *s, SessionClass c) {
@@ -1215,7 +1215,7 @@ void session_set_class(Session *s, SessionClass c) {
 
         s->class = c;
         (void) session_save(s);
-        (void) session_send_changed(s, "Class", NULL);
+        (void) session_send_changed(s, "Class");
 
         /* This class change might mean we need the per-user session manager now. Try to start it. */
         (void) user_start_service_manager(s->user);
@@ -1232,7 +1232,7 @@ int session_set_display(Session *s, const char *display) {
                 return r;
 
         (void) session_save(s);
-        (void) session_send_changed(s, "Display", NULL);
+        (void) session_send_changed(s, "Display");
 
         return 1;
 }
@@ -1248,7 +1248,7 @@ int session_set_tty(Session *s, const char *tty) {
                 return r;
 
         (void) session_save(s);
-        (void) session_send_changed(s, "TTY", NULL);
+        (void) session_send_changed(s, "TTY");
 
         return 1;
 }
index ade2368b9692b276cd621b9dee08ca70716b0da3..34904d9b74a5471d5c8db69aea5af3ad08889ee7 100644 (file)
@@ -399,9 +399,8 @@ int user_send_signal(User *u, bool new_user) {
                         "uo", (uint32_t) u->user_record->uid, p);
 }
 
-int user_send_changed(User *u, const char *properties, ...) {
+int user_send_changed_strv(User *u, char **properties) {
         _cleanup_free_ char *p = NULL;
-        char **l;
 
         assert(u);
 
@@ -412,7 +411,5 @@ int user_send_changed(User *u, const char *properties, ...) {
         if (!p)
                 return -ENOMEM;
 
-        l = strv_from_stdarg_alloca(properties);
-
-        return sd_bus_emit_properties_changed_strv(u->manager->bus, p, "org.freedesktop.login1.User", l);
+        return sd_bus_emit_properties_changed_strv(u->manager->bus, p, "org.freedesktop.login1.User", properties);
 }
index 33f810f7f5409c241c562ddc650d811fbd9bc97c..867abc1799e630f58658fbb77e531f0270af4623 100644 (file)
@@ -13,7 +13,8 @@ extern const BusObjectImplementation user_object;
 char* user_bus_path(User *s);
 
 int user_send_signal(User *u, bool new_user);
-int user_send_changed(User *u, const char *properties, ...) _sentinel_;
+int user_send_changed_strv(User *u, char **properties);
+#define user_send_changed(u, ...) user_send_changed_strv(u, STRV_MAKE(__VA_ARGS__))
 
 int bus_user_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error);
 int bus_user_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error);
index 470e5599e27d28e0e8284fb23b5bb2fe2937e263..8a6822e2b7aa1a335bf067d35372ce2139d9fc5a 100644 (file)
@@ -72,9 +72,8 @@ static int property_get_leases(
         return sd_bus_message_close_container(reply);
 }
 
-static int dhcp_server_emit_changed(Link *link, const char *property, ...) {
+static int dhcp_server_emit_changed_strv(Link *link, char **properties) {
         _cleanup_free_ char *path = NULL;
-        char **l;
 
         assert(link);
 
@@ -85,20 +84,18 @@ static int dhcp_server_emit_changed(Link *link, const char *property, ...) {
         if (!path)
                 return log_oom();
 
-        l = strv_from_stdarg_alloca(property);
-
         return sd_bus_emit_properties_changed_strv(
                         link->manager->bus,
                         path,
                         "org.freedesktop.network1.DHCPServer",
-                        l);
+                        properties);
 }
 
 void dhcp_server_callback(sd_dhcp_server *s, uint64_t event, void *data) {
         Link *l = ASSERT_PTR(data);
 
         if (event & SD_DHCP_SERVER_EVENT_LEASE_CHANGED)
-                (void) dhcp_server_emit_changed(l, "Leases", NULL);
+                (void) dhcp_server_emit_changed_strv(l, STRV_MAKE("Leases"));
 }
 
 static const sd_bus_vtable dhcp_server_vtable[] = {
index e00aa0364fab45ad7f491bcdcb47922064ecad92..68fe7bc394b8016ba3bd7bc9dfe910ca670e5183 100644 (file)
@@ -33,9 +33,8 @@ static int property_get_dhcp_client_state(
         return sd_bus_message_append(reply, "s", dhcp_state_to_string(dhcp_client_get_state(c)));
 }
 
-static int dhcp_client_emit_changed(Link *link, const char *property, ...) {
+static int dhcp_client_emit_changed(Link *link, char **properties) {
         _cleanup_free_ char *path = NULL;
-        char **l;
 
         assert(link);
 
@@ -46,19 +45,17 @@ static int dhcp_client_emit_changed(Link *link, const char *property, ...) {
         if (!path)
                 return log_oom();
 
-        l = strv_from_stdarg_alloca(property);
-
         return sd_bus_emit_properties_changed_strv(
                         link->manager->bus,
                         path,
                         "org.freedesktop.network1.DHCPv4Client",
-                        l);
+                        properties);
 }
 
 int dhcp_client_callback_bus(sd_dhcp_client *c, int event, void *userdata) {
         Link *l = ASSERT_PTR(userdata);
 
-        return dhcp_client_emit_changed(l, "State", NULL);
+        return dhcp_client_emit_changed(l, STRV_MAKE("State"));
 }
 
 static const sd_bus_vtable dhcp_client_vtable[] = {
index a225877373eebebd17f9a575307f14c523867469..7f37ca09eb6841813d1609b41c055c92cbc08e69 100644 (file)
@@ -32,9 +32,8 @@ static int property_get_dhcp6_client_state(
         return sd_bus_message_append(reply, "s", dhcp6_state_to_string(dhcp6_client_get_state(c)));
 }
 
-static int dhcp6_client_emit_changed(Link *link, const char *property, ...) {
+static int dhcp6_client_emit_changed_strv(Link *link, char **properties) {
         _cleanup_free_ char *path = NULL;
-        char **l;
 
         assert(link);
 
@@ -45,19 +44,17 @@ static int dhcp6_client_emit_changed(Link *link, const char *property, ...) {
         if (!path)
                 return log_oom();
 
-        l = strv_from_stdarg_alloca(property);
-
         return sd_bus_emit_properties_changed_strv(
                         link->manager->bus,
                         path,
                         "org.freedesktop.network1.DHCPv6Client",
-                        l);
+                        properties);
 }
 
 void dhcp6_client_callback_bus(sd_dhcp6_client *c, int event, void *userdata) {
         Link *l = ASSERT_PTR(userdata);
 
-        dhcp6_client_emit_changed(l, "State", NULL);
+        dhcp6_client_emit_changed_strv(l, STRV_MAKE("State"));
 }
 
 static const sd_bus_vtable dhcp6_client_vtable[] = {
index b4026054c0916623c57675df166a669bdcd5c18d..9e8ae7635d58cec4276c506539bfe05e750ca255 100644 (file)
@@ -902,14 +902,6 @@ int link_send_changed_strv(Link *link, char **properties) {
                         properties);
 }
 
-int link_send_changed(Link *link, const char *property, ...) {
-        char **properties;
-
-        properties = strv_from_stdarg_alloca(property);
-
-        return link_send_changed_strv(link, properties);
-}
-
 const BusObjectImplementation link_object = {
         "/org/freedesktop/network1/link",
         "org.freedesktop.network1.Link",
index bb12db92ee7c88c9ff3e8a2c875c0e6a73f3c09b..7b0156b4df6195e5c02a95cd0cfb4a14f205ef26 100644 (file)
@@ -14,7 +14,7 @@ char* link_bus_path(Link *link);
 int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
 int link_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
 int link_send_changed_strv(Link *link, char **properties);
-int link_send_changed(Link *link, const char *property, ...) _sentinel_;
+#define link_send_changed(link, ...) link_send_changed_strv(link, STRV_MAKE(__VA_ARGS__));
 
 int property_get_operational_state(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
 int property_get_carrier_state(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
index c7f48c6763d10eb8a55241506b82dc87cbe9ca16..f81e88fbc3669ee98c9d92c65aa51b8a875960f7 100644 (file)
@@ -381,7 +381,7 @@ void link_set_state(Link *link, LinkState state) {
 
         link->state = state;
 
-        link_send_changed(link, "AdministrativeState", NULL);
+        link_send_changed(link, "AdministrativeState");
         link_dirty(link);
 }
 
index 23dad7f9cf4f2a028a0871c55b120c0ce626c636..e9b47488e75e4e8c2114fbced15b09342b0a2284 100644 (file)
@@ -2287,20 +2287,19 @@ int manager_connect_bus(Manager *m) {
         return 0;
 }
 
-int _manager_send_changed(Manager *manager, const char *property, ...) {
+int manager_send_changed_strv(Manager *manager, char **properties) {
         assert(manager);
 
         if (sd_bus_is_ready(manager->bus) <= 0)
                 return 0;
 
-        char **l = strv_from_stdarg_alloca(property);
-
         int r = sd_bus_emit_properties_changed_strv(
                         manager->bus,
                         "/org/freedesktop/resolve1",
                         "org.freedesktop.resolve1.Manager",
-                        l);
+                        properties);
         if (r < 0)
-                log_notice_errno(r, "Failed to emit notification about changed property %s: %m", property);
+                log_notice_errno(r, "Failed to emit notification about changed properties: %m");
+
         return r;
 }
index 073ff1eb5a391c6ecd69cd15dd399a13d7958d85..fb8de0ddb49eb61b9a88f840553bdc6c93393d68 100644 (file)
@@ -10,8 +10,8 @@ typedef struct Manager Manager;
 extern const BusObjectImplementation manager_object;
 
 int manager_connect_bus(Manager *m);
-int _manager_send_changed(Manager *manager, const char *property, ...) _sentinel_;
-#define manager_send_changed(manager, ...) _manager_send_changed(manager, __VA_ARGS__, NULL)
+int manager_send_changed_strv(Manager *manager, char **properties);
+#define manager_send_changed(manager, ...) manager_send_changed_strv(manager, STRV_MAKE(__VA_ARGS__));
 int bus_dns_server_append(sd_bus_message *reply, DnsServer *s, bool with_ifindex, bool extended);
 int bus_property_get_resolve_support(sd_bus *bus, const char *path, const char *interface,
                                      const char *property, sd_bus_message *reply,
index 0b8b20addde2912ae9ce60e6fd3425e61d07071f..75f24aef985260f0f5108875c3d3cf60278ca3f0 100644 (file)
@@ -561,10 +561,10 @@ int shall_fork_agent(void) {
         return true;
 }
 
-int _fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) {
+int _fork_agent(const char *name, char * const *argv, const int except[], size_t n_except, pid_t *ret_pid) {
         int r;
 
-        assert(path);
+        assert(!strv_isempty(argv));
 
         /* Spawns a temporary TTY agent, making sure it goes away when we go away */
 
@@ -617,8 +617,7 @@ int _fork_agent(const char *name, const int except[], size_t n_except, pid_t *re
         }
 
         /* Count arguments */
-        char **l = strv_from_stdarg_alloca(path);
-        execv(path, l);
-        log_error_errno(errno, "Failed to execute %s: %m", path);
+        execv(argv[0], argv);
+        log_error_errno(errno, "Failed to execute %s: %m", argv[0]);
         _exit(EXIT_FAILURE);
 }
index 172fc5dc73a8153dafb892625ee98d2b21940793..93d9e8c11184fbe5856f42bc0278fdfe23e0976a 100644 (file)
@@ -62,5 +62,5 @@ ExecCommandFlags exec_command_flags_from_string(const char *s);
 int fexecve_or_execve(int executable_fd, const char *executable, char *const argv[], char *const envp[]);
 
 int shall_fork_agent(void);
-int _fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) _sentinel_;
-#define fork_agent(name, ...) _fork_agent(name, __VA_ARGS__, NULL)
+int _fork_agent(const char *name, char * const *argv, const int except[], size_t n_except, pid_t *ret_pid);
+#define fork_agent(name, except, n_except, ret_pid, ...) _fork_agent(name, STRV_MAKE(__VA_ARGS__), except, n_except, ret_pid)
index 028765665b9fe30efd744947671b4500d2e91651..63d30afe8f38a1d78cdccd4768bbf8182cb6f018 100644 (file)
@@ -791,28 +791,6 @@ TEST(strv_foreach_pair) {
                 ASSERT_STREQ(*x, *y);
 }
 
-static void test_strv_from_stdarg_alloca_one(char **l, const char *first, ...) {
-        char **j;
-        unsigned i;
-
-        log_info("/* %s */", __func__);
-
-        j = strv_from_stdarg_alloca(first);
-
-        for (i = 0;; i++) {
-                ASSERT_STREQ(l[i], j[i]);
-
-                if (!l[i])
-                        break;
-        }
-}
-
-TEST(strv_from_stdarg_alloca) {
-        test_strv_from_stdarg_alloca_one(STRV_MAKE("foo", "bar"), "foo", "bar", NULL);
-        test_strv_from_stdarg_alloca_one(STRV_MAKE("foo"), "foo", NULL);
-        test_strv_from_stdarg_alloca_one(STRV_MAKE_EMPTY, NULL);
-}
-
 TEST(strv_insert) {
         _cleanup_strv_free_ char **a = NULL;