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
+3
-3
@@ -58,7 +58,7 @@ static void on_tar_finished(TarExport *export, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_export_tar(int argc, char *argv[], void *userdata) {
|
||||
static int verb_export_tar(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(tar_export_unrefp) TarExport *export = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
_cleanup_(image_unrefp) Image *image = NULL;
|
||||
@@ -139,7 +139,7 @@ static void on_raw_finished(RawExport *export, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_export_raw(int argc, char *argv[], void *userdata) {
|
||||
static int verb_export_raw(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(raw_export_unrefp) RawExport *export = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
_cleanup_(image_unrefp) Image *image = NULL;
|
||||
@@ -225,7 +225,7 @@ static int help(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_help(int argc, char *argv[], void *userdata) {
|
||||
static int verb_help(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return help();
|
||||
}
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ static int progress_bytes(uint64_t nbytes, uint64_t bps, void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_import_fs(int argc, char *argv[], void *userdata) {
|
||||
static int verb_import_fs(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(rm_rf_subvolume_and_freep) char *temp_path = NULL;
|
||||
_cleanup_(progress_info_free) ProgressInfo progress = { .bps = UINT64_MAX };
|
||||
_cleanup_free_ char *l = NULL, *final_path = NULL;
|
||||
@@ -295,7 +295,7 @@ static int help(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_help(int argc, char *argv[], void *userdata) {
|
||||
static int verb_help(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return help();
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -138,7 +138,7 @@ static void on_tar_finished(TarImport *import, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_import_tar(int argc, char *argv[], void *userdata) {
|
||||
static int verb_import_tar(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(tar_import_unrefp) TarImport *import = NULL;
|
||||
_cleanup_free_ char *ll = NULL, *normalized = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
@@ -207,7 +207,7 @@ static void on_raw_finished(RawImport *import, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_import_raw(int argc, char *argv[], void *userdata) {
|
||||
static int verb_import_raw(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(raw_import_unrefp) RawImport *import = NULL;
|
||||
_cleanup_free_ char *ll = NULL, *normalized = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
@@ -303,7 +303,7 @@ static int help(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_help(int argc, char *argv[], void *userdata) {
|
||||
static int verb_help(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return help();
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -261,7 +261,7 @@ static int transfer_image_common(sd_bus *bus, sd_bus_message *m) {
|
||||
return -r;
|
||||
}
|
||||
|
||||
static int verb_import_tar(int argc, char *argv[], void *userdata) {
|
||||
static int verb_import_tar(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_free_ char *ll = NULL, *fn = NULL;
|
||||
const char *local = NULL, *path = NULL;
|
||||
@@ -340,7 +340,7 @@ static int verb_import_tar(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_import_raw(int argc, char *argv[], void *userdata) {
|
||||
static int verb_import_raw(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_free_ char *ll = NULL, *fn = NULL;
|
||||
const char *local = NULL, *path = NULL;
|
||||
@@ -419,7 +419,7 @@ static int verb_import_raw(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_import_fs(int argc, char *argv[], void *userdata) {
|
||||
static int verb_import_fs(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
const char *local = NULL, *path = NULL;
|
||||
_cleanup_free_ char *fn = NULL;
|
||||
@@ -506,7 +506,7 @@ static void determine_compression_from_filename(const char *p) {
|
||||
arg_format = "zstd";
|
||||
}
|
||||
|
||||
static int verb_export_tar(int argc, char *argv[], void *userdata) {
|
||||
static int verb_export_tar(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
const char *local = NULL, *path = NULL;
|
||||
@@ -565,7 +565,7 @@ static int verb_export_tar(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_export_raw(int argc, char *argv[], void *userdata) {
|
||||
static int verb_export_raw(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_close_ int fd = -EBADF;
|
||||
const char *local = NULL, *path = NULL;
|
||||
@@ -624,7 +624,7 @@ static int verb_export_raw(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_pull_tar(int argc, char *argv[], void *userdata) {
|
||||
static int verb_pull_tar(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_free_ char *l = NULL, *ll = NULL;
|
||||
const char *local, *remote;
|
||||
@@ -697,7 +697,7 @@ static int verb_pull_tar(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_pull_raw(int argc, char *argv[], void *userdata) {
|
||||
static int verb_pull_raw(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_free_ char *l = NULL, *ll = NULL;
|
||||
const char *local, *remote;
|
||||
@@ -770,7 +770,7 @@ static int verb_pull_raw(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_pull_oci(int argc, char *argv[], void *userdata) {
|
||||
static int verb_pull_oci(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_free_ char *l = NULL;
|
||||
const char *local, *remote;
|
||||
@@ -825,7 +825,7 @@ static int verb_pull_oci(int argc, char *argv[], void *userdata) {
|
||||
return transfer_image_common(bus, m);
|
||||
}
|
||||
|
||||
static int verb_list_transfers(int argc, char *argv[], void *userdata) {
|
||||
static int verb_list_transfers(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||
_cleanup_(table_unrefp) Table *t = NULL;
|
||||
@@ -929,7 +929,7 @@ static int verb_list_transfers(int argc, char *argv[], void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_cancel_transfer(int argc, char *argv[], void *userdata) {
|
||||
static int verb_cancel_transfer(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
sd_bus *bus = ASSERT_PTR(userdata);
|
||||
int r;
|
||||
@@ -951,7 +951,7 @@ static int verb_cancel_transfer(int argc, char *argv[], void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_list_images(int argc, char *argv[], void *userdata) {
|
||||
static int verb_list_images(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||
_cleanup_(table_unrefp) Table *t = NULL;
|
||||
@@ -1112,7 +1112,7 @@ static int help(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_help(int argc, char *argv[], void *userdata) {
|
||||
static int verb_help(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return help();
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -117,7 +117,7 @@ static void on_tar_finished(TarPull *pull, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_pull_tar(int argc, char *argv[], void *userdata) {
|
||||
static int verb_pull_tar(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_free_ char *ll = NULL, *normalized = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
_cleanup_(tar_pull_unrefp) TarPull *pull = NULL;
|
||||
@@ -187,7 +187,7 @@ static void on_raw_finished(RawPull *pull, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_pull_raw(int argc, char *argv[], void *userdata) {
|
||||
static int verb_pull_raw(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_free_ char *ll = NULL, *normalized = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
_cleanup_(raw_pull_unrefp) RawPull *pull = NULL;
|
||||
@@ -256,7 +256,7 @@ static void on_oci_finished(OciPull *pull, int error, void *userdata) {
|
||||
sd_event_exit(event, ABS(error));
|
||||
}
|
||||
|
||||
static int verb_pull_oci(int argc, char *argv[], void *userdata) {
|
||||
static int verb_pull_oci(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int r;
|
||||
|
||||
const char *ref = argv[1];
|
||||
@@ -356,7 +356,7 @@ static int help(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_help(int argc, char *argv[], void *userdata) {
|
||||
static int verb_help(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return help();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user