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:
committed by
Luca Boccassi
parent
9e8babc8ab
commit
31ddd87da0
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user