tree-wide: extend verbs functions with extra per-verb data parameter

We often have a pattern where the same verb function is used for
multiple actions. This leads to an antipattern where we figure out what
action needs to be taken from argv[0] multiple times: often once in
parse_argv() to figure out what options are allowed, then once again
implicitly in dispatch_verb(), and then again in the action verb itself.
Let's allow passing a parameter into the verb to simplify this.

This matches a pattern we have in conf-parser.h, where we have both
void *userdata (more global) and void *data (per-config item). Here,
I opted for uintptr_t userdata. It seems that most of the time we'll
want to just pass an enum value. This works OK with no casts. I also
tried a void* and union. In both cases, much more boilerplate is needed:
either a cast or a macro to help avoid compiler warnings. uintptr_t
seems generic enough to cover foreseeable usecases with no fuss.

This is a noop refactoring. See next commit for an example.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2026-03-18 10:28:47 +00:00
committed by Luca Boccassi
parent 9e8babc8ab
commit 31ddd87da0
216 changed files with 745 additions and 573 deletions
+1 -1
View File
@@ -89,7 +89,7 @@ static int dump_address_labels(sd_netlink *rtnl) {
return 0;
}
int verb_list_address_labels(int argc, char *argv[], void *userdata) {
int verb_list_address_labels(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
int r;
+3 -1
View File
@@ -1,4 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
int verb_list_address_labels(int argc, char *argv[], void *userdata);
#include "shared-forward.h"
int verb_list_address_labels(int argc, char *argv[], uintptr_t _data, void *userdata);
+4 -4
View File
@@ -470,7 +470,7 @@ static int reload_daemons(ReloadFlags flags) {
return ret;
}
int verb_edit(int argc, char *argv[], void *userdata) {
int verb_edit(int argc, char *argv[], uintptr_t _data, void *userdata) {
char **args = ASSERT_PTR(strv_skip(argv, 1));
_cleanup_(edit_file_context_done) EditFileContext context = {
.marker_start = DROPIN_MARKER_START,
@@ -630,7 +630,7 @@ static int cat_files_by_link_config(const char *link_config, sd_netlink **rtnl,
return cat_files_by_link_one(ifname, type, rtnl, /* ignore_missing= */ false, first);
}
int verb_cat(int argc, char *argv[], void *userdata) {
int verb_cat(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
char **args = strv_skip(argv, 1);
int r, ret = 0;
@@ -683,7 +683,7 @@ int verb_cat(int argc, char *argv[], void *userdata) {
return ret;
}
int verb_mask(int argc, char *argv[], void *userdata) {
int verb_mask(int argc, char *argv[], uintptr_t _data, void *userdata) {
ReloadFlags flags = 0;
int r;
@@ -747,7 +747,7 @@ int verb_mask(int argc, char *argv[], void *userdata) {
return reload_daemons(flags);
}
int verb_unmask(int argc, char *argv[], void *userdata) {
int verb_unmask(int argc, char *argv[], uintptr_t _data, void *userdata) {
ReloadFlags flags = 0;
int r;
+6 -4
View File
@@ -1,8 +1,10 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
int verb_edit(int argc, char *argv[], void *userdata);
int verb_cat(int argc, char *argv[], void *userdata);
#include "shared-forward.h"
int verb_mask(int argc, char *argv[], void *userdata);
int verb_unmask(int argc, char *argv[], void *userdata);
int verb_edit(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_cat(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_mask(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_unmask(int argc, char *argv[], uintptr_t _data, void *userdata);
+1 -1
View File
@@ -12,7 +12,7 @@
#include "networkctl-list.h"
#include "networkctl-util.h"
int verb_list_links(int argc, char *argv[], void *userdata) {
int verb_list_links(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
_cleanup_(link_info_array_freep) LinkInfo *links = NULL;
_cleanup_(table_unrefp) Table *table = NULL;
+3 -1
View File
@@ -1,4 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
int verb_list_links(int argc, char *argv[], void *userdata);
#include "shared-forward.h"
int verb_list_links(int argc, char *argv[], uintptr_t _data, void *userdata);
+1 -1
View File
@@ -219,7 +219,7 @@ static int dump_lldp_neighbors_json(sd_json_variant *reply, char * const *patter
return sd_json_variant_dump(v, arg_json_format_flags, NULL, NULL);
}
int verb_link_lldp_status(int argc, char *argv[], void *userdata) {
int verb_link_lldp_status(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_varlink_flush_close_unrefp) sd_varlink *vl = NULL;
_cleanup_(table_unrefp) Table *table = NULL;
sd_json_variant *reply;
+1 -1
View File
@@ -4,4 +4,4 @@
#include "shared-forward.h"
int dump_lldp_neighbors(sd_varlink *vl, Table *table, int ifindex);
int verb_link_lldp_status(int argc, char *argv[], void *userdata);
int verb_link_lldp_status(int argc, char *argv[], uintptr_t _data, void *userdata);
+5 -5
View File
@@ -46,7 +46,7 @@ static int parse_interfaces(sd_netlink **rtnl, char *argv[], OrderedSet **ret) {
return 0;
}
int verb_link_up_down(int argc, char *argv[], void *userdata) {
int verb_link_up_down(int argc, char *argv[], uintptr_t _data, void *userdata) {
int r, ret = 0;
bool up = streq_ptr(argv[0], "up");
@@ -75,7 +75,7 @@ int verb_link_up_down(int argc, char *argv[], void *userdata) {
return ret;
}
int verb_link_delete(int argc, char *argv[], void *userdata) {
int verb_link_delete(int argc, char *argv[], uintptr_t _data, void *userdata) {
int r, ret = 0;
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
@@ -104,7 +104,7 @@ int verb_link_delete(int argc, char *argv[], void *userdata) {
return ret;
}
int verb_link_bus_simple_method(int argc, char *argv[], void *userdata) {
int verb_link_bus_simple_method(int argc, char *argv[], uintptr_t _data, void *userdata) {
int r, ret = 0;
typedef struct LinkBusAction {
@@ -159,7 +159,7 @@ int verb_link_bus_simple_method(int argc, char *argv[], void *userdata) {
return ret;
}
int verb_reload(int argc, char *argv[], void *userdata) {
int verb_reload(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
int r;
@@ -177,7 +177,7 @@ int verb_reload(int argc, char *argv[], void *userdata) {
return 0;
}
int verb_persistent_storage(int argc, char *argv[], void *userdata) {
int verb_persistent_storage(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_varlink_flush_close_unrefp) sd_varlink *vl = NULL;
bool ready;
int r;
+7 -5
View File
@@ -1,8 +1,10 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
int verb_link_up_down(int argc, char *argv[], void *userdata);
int verb_link_delete(int argc, char *argv[], void *userdata);
int verb_link_bus_simple_method(int argc, char *argv[], void *userdata);
int verb_reload(int argc, char *argv[], void *userdata);
int verb_persistent_storage(int argc, char *argv[], void *userdata);
#include "shared-forward.h"
int verb_link_up_down(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_link_delete(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_link_bus_simple_method(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_reload(int argc, char *argv[], uintptr_t _data, void *userdata);
int verb_persistent_storage(int argc, char *argv[], uintptr_t _data, void *userdata);
+1 -1
View File
@@ -939,7 +939,7 @@ static int link_status_one(
return show_logs(info->ifindex, info->name);
}
int verb_link_status(int argc, char *argv[], void *userdata) {
int verb_link_status(int argc, char *argv[], uintptr_t _data, void *userdata) {
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
_cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
+3 -1
View File
@@ -1,4 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
int verb_link_status(int argc, char *argv[], void *userdata);
#include "shared-forward.h"
int verb_link_status(int argc, char *argv[], uintptr_t _data, void *userdata);