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
@@ -280,11 +280,11 @@ static int query_solutions_for_path(const char *path) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_query(int argc, char *argv[], void *userdata) {
|
||||
static int verb_query(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return query_solutions_for_path(ASSERT_PTR(argv[1]));
|
||||
}
|
||||
|
||||
static int verb_apply(int argc, char *argv[], void *userdata) {
|
||||
static int verb_apply(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return apply_solution_for_path(
|
||||
ASSERT_PTR(argv[1]),
|
||||
argc > 2 ? ASSERT_PTR(argv[2]) : NULL);
|
||||
|
||||
@@ -92,7 +92,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int verb_cat_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_cat_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int r;
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
|
||||
@@ -331,7 +331,7 @@ static int send_control_commands(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int verb_control_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_control_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int r;
|
||||
|
||||
if (running_in_chroot() > 0) {
|
||||
|
||||
@@ -78,7 +78,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int verb_hwdb_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_hwdb_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int r;
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
|
||||
@@ -1275,7 +1275,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int verb_info_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_info_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int r;
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
|
||||
@@ -228,7 +228,7 @@ static int lock_device(
|
||||
return TAKE_FD(fd);
|
||||
}
|
||||
|
||||
int verb_lock_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_lock_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_fdset_free_ FDSet *fds = NULL;
|
||||
_cleanup_free_ dev_t *devnos = NULL;
|
||||
size_t n_devnos = 0;
|
||||
|
||||
@@ -187,7 +187,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int verb_monitor_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_monitor_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_device_monitor_unrefp) sd_device_monitor *kernel_monitor = NULL, *udev_monitor = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
int r;
|
||||
|
||||
@@ -184,7 +184,7 @@ static int on_inotify(sd_event_source *s, const struct inotify_event *event, voi
|
||||
return 0;
|
||||
}
|
||||
|
||||
int verb_settle_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_settle_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
int r;
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int verb_builtin_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_builtin_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(udev_event_unrefp) UdevEvent *event = NULL;
|
||||
_cleanup_(sd_device_unrefp) sd_device *dev = NULL;
|
||||
UdevBuiltinCommand cmd;
|
||||
|
||||
@@ -129,7 +129,7 @@ static void maybe_insert_empty_line(void) {
|
||||
fputs("\n", stderr);
|
||||
}
|
||||
|
||||
int verb_test_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_test_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(udev_rules_freep) UdevRules *rules = NULL;
|
||||
_cleanup_(udev_event_unrefp) UdevEvent *event = NULL;
|
||||
_cleanup_(sd_device_unrefp) sd_device *dev = NULL;
|
||||
|
||||
@@ -534,7 +534,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int verb_trigger_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_trigger_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
|
||||
_cleanup_(sd_device_monitor_unrefp) sd_device_monitor *m = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
|
||||
@@ -156,7 +156,7 @@ static int verify_rules(UdevRules *rules, ConfFile * const *files, size_t n_file
|
||||
return ret;
|
||||
}
|
||||
|
||||
int verb_verify_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_verify_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(udev_rules_freep) UdevRules *rules = NULL;
|
||||
int r;
|
||||
|
||||
|
||||
@@ -376,7 +376,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1; /* work to do */
|
||||
}
|
||||
|
||||
int verb_wait_main(int argc, char *argv[], void *userdata) {
|
||||
int verb_wait_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_device_monitor_unrefp) sd_device_monitor *udev_monitor = NULL, *kernel_monitor = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
int r;
|
||||
|
||||
+2
-2
@@ -91,11 +91,11 @@ int print_version(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_version_main(int argc, char *argv[], void *userdata) {
|
||||
static int verb_version_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return print_version();
|
||||
}
|
||||
|
||||
static int verb_help_main(int argc, char *argv[], void *userdata) {
|
||||
static int verb_help_main(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return help();
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -3,17 +3,17 @@
|
||||
|
||||
#include "shared-forward.h"
|
||||
|
||||
int verb_cat_main(int argc, char *argv[], void *userdata);
|
||||
int verb_info_main(int argc, char *argv[], void *userdata);
|
||||
int verb_trigger_main(int argc, char *argv[], void *userdata);
|
||||
int verb_settle_main(int argc, char *argv[], void *userdata);
|
||||
int verb_control_main(int argc, char *argv[], void *userdata);
|
||||
int verb_monitor_main(int argc, char *argv[], void *userdata);
|
||||
int verb_hwdb_main(int argc, char *argv[], void *userdata);
|
||||
int verb_test_main(int argc, char *argv[], void *userdata);
|
||||
int verb_builtin_main(int argc, char *argv[], void *userdata);
|
||||
int verb_verify_main(int argc, char *argv[], void *userdata);
|
||||
int verb_wait_main(int argc, char *argv[], void *userdata);
|
||||
int verb_lock_main(int argc, char *argv[], void *userdata);
|
||||
int verb_cat_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_info_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_trigger_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_settle_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_control_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_monitor_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_hwdb_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_test_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_builtin_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_verify_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_wait_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
int verb_lock_main(int argc, char *argv[], uintptr_t _data, void *userdata);
|
||||
|
||||
int print_version(void);
|
||||
|
||||
Reference in New Issue
Block a user