From 5b6a23726af635e8fae45c87509473914df74d7e Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Tue, 16 Sep 2003 14:13:51 +0000 Subject: [PATCH] Make dev_name optional to show details for all devices. e.g. 'dmsetup info', 'dmsetup status -v', 'dmsetup table' --- tools/dmsetup.c | 162 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 108 insertions(+), 54 deletions(-) diff --git a/tools/dmsetup.c b/tools/dmsetup.c index 44e4b97eb..4da0259c7 100644 --- a/tools/dmsetup.c +++ b/tools/dmsetup.c @@ -167,7 +167,7 @@ static int _load(int task, const char *name, const char *file, const char *uuid) return r; } -static int _create(int argc, char **argv) +static int _create(int argc, char **argv, void *data) { if (argc == 1) return _load(DM_DEVICE_CREATE, argv[1], NULL, NULL); @@ -176,12 +176,12 @@ static int _create(int argc, char **argv) (argc == 3) ? argv[3] : NULL); } -static int _reload(int argc, char **argv) +static int _reload(int argc, char **argv, void *data) { return _load(DM_DEVICE_RELOAD, argv[1], argv[2], NULL); } -static int _rename(int argc, char **argv) +static int _rename(int argc, char **argv, void *data) { int r = 0; struct dm_task *dmt; @@ -206,7 +206,7 @@ static int _rename(int argc, char **argv) return r; } -static int _version(int argc, char **argv) +static int _version(int argc, char **argv, void *data) { int r = 0; struct dm_task *dmt; @@ -258,37 +258,73 @@ static int _simple(int task, const char *name, int display) return r; } -static int _remove_all(int argc, char **argv) +static int _remove_all(int argc, char **argv, void *data) { return _simple(DM_DEVICE_REMOVE_ALL, "", 0); } -static int _remove(int argc, char **argv) +static int _remove(int argc, char **argv, void *data) { return _simple(DM_DEVICE_REMOVE, argv[1], 0); } -static int _suspend(int argc, char **argv) +static int _suspend(int argc, char **argv, void *data) { return _simple(DM_DEVICE_SUSPEND, argv[1], 1); } -static int _resume(int argc, char **argv) +static int _resume(int argc, char **argv, void *data) { return _simple(DM_DEVICE_RESUME, argv[1], 1); } -static int _clear(int argc, char **argv) +static int _clear(int argc, char **argv, void *data) { return _simple(DM_DEVICE_CLEAR, argv[1], 1); } -static int _wait(int argc, char **argv) +static int _wait(int argc, char **argv, void *data) { return _simple(DM_DEVICE_WAITEVENT, argv[1], 2); } -static int _status(int argc, char **argv) +static int _process_all(int argc, char **argv, + int (*fn)(int argc, char **argv, void *data)) +{ + int r = 0; + struct dm_names *names; + unsigned next = 0; + + struct dm_task *dmt; + + if (!(dmt = dm_task_create(DM_DEVICE_LIST))) + return 0; + + if (!dm_task_run(dmt)) + goto out; + + if (!(names = dm_task_get_names(dmt))) + goto out; + + r = 1; + if (!names->dev) { + printf("No devices found\n"); + goto out; + } + + do { + names = (void *) names + next; + if (!fn(argc, argv, (void *)names)) + r = 0; + next = names->next; + } while (next); + + out: + dm_task_destroy(dmt); + return r; +} + +static int _status(int argc, char **argv, void *data) { int r = 0; struct dm_task *dmt; @@ -297,6 +333,16 @@ static int _status(int argc, char **argv) char *target_type = NULL; char *params; int cmd; + struct dm_names *names = (struct dm_names *)data; + char *name; + + if (argc == 1 && !data) + return _process_all(argc, argv, _status); + + if (data) + name = names->name; + else + name = argv[1]; if (!strcmp(argv[0], "status")) cmd = DM_DEVICE_STATUS; @@ -306,7 +352,7 @@ static int _status(int argc, char **argv) if (!(dmt = dm_task_create(cmd))) return 0; - if (!dm_task_set_name(dmt, argv[1])) + if (!dm_task_set_name(dmt, name)) goto out; if (!dm_task_run(dmt)) @@ -319,12 +365,17 @@ static int _status(int argc, char **argv) do { next = dm_get_next_target(dmt, next, &start, &length, &target_type, ¶ms); + if (data && !_switches[VERBOSE_ARG]) + printf("%s: ", name); if (target_type) { printf("%" PRIu64 " %" PRIu64 " %s %s\n", start, length, target_type, params); } } while (next); + if (data && _switches[VERBOSE_ARG]) + printf("\n"); + r = 1; out: @@ -333,23 +384,33 @@ static int _status(int argc, char **argv) } -static int _info(int argc, char **argv) +static int _info(int argc, char **argv, void *data) { int r = 0; - /* remove */ struct dm_task *dmt; + struct dm_names *names = (struct dm_names *)data; + char *name; + + if (argc == 1 && !data) + return _process_all(argc, argv, _info); + + if (data) + name = names->name; + else + name = argv[1]; if (!(dmt = dm_task_create(DM_DEVICE_INFO))) return 0; - if (!dm_task_set_name(dmt, argv[1])) + if (!dm_task_set_name(dmt, name)) goto out; if (!dm_task_run(dmt)) goto out; _display_info(dmt); + r = 1; out: @@ -357,20 +418,28 @@ static int _info(int argc, char **argv) return r; } -static int _deps(int argc, char **argv) +static int _deps(int argc, char **argv, void *data) { int r = 0; uint32_t i; struct dm_deps *deps; - - /* remove */ struct dm_task *dmt; struct dm_info info; + struct dm_names *names = (struct dm_names *)data; + char *name; + + if (argc == 1 && !data) + return _process_all(argc, argv, _deps); + + if (data) + name = names->name; + else + name = argv[1]; if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) return 0; - if (!dm_task_set_name(dmt, argv[1])) + if (!dm_task_set_name(dmt, name)) goto out; if (!dm_task_run(dmt)) @@ -391,6 +460,8 @@ static int _deps(int argc, char **argv) if (_switches[VERBOSE_ARG]) _display_info(dmt); + if (data && !_switches[VERBOSE_ARG]) + printf("%s: ", name); printf("%d dependencies\t:", deps->count); for (i = 0; i < deps->count; i++) @@ -399,6 +470,9 @@ static int _deps(int argc, char **argv) (int) MINOR(deps->device[i])); printf("\n"); + if (data && _switches[VERBOSE_ARG]) + printf("\n"); + r = 1; out: @@ -406,45 +480,25 @@ static int _deps(int argc, char **argv) return r; } -static int _ls(int argc, char **argv) +static int _display_name(int argc, char **argv, void *data) { - int r = 0; - struct dm_names *names; - unsigned next = 0; - - struct dm_task *dmt; + struct dm_names *names = (struct dm_names *)data; - if (!(dmt = dm_task_create(DM_DEVICE_LIST))) - return 0; + printf("%s\t(%d, %d)\n", names->name, + (int) MAJOR(names->dev), (int) MINOR(names->dev)); - if (!dm_task_run(dmt)) - goto out; - - if (!(names = dm_task_get_names(dmt))) - goto out; - - r = 1; - if (!names->dev) { - printf("No devices found\n"); - goto out; - } - - do { - names = (void *) names + next; - printf("%s\t(%d, %d)\n", names->name, - (int) MAJOR(names->dev), (int) MINOR(names->dev)); - next = names->next; - } while (next); + return 1; +} - out: - dm_task_destroy(dmt); - return r; +static int _ls(int argc, char **argv, void *data) +{ + return _process_all(argc, argv, _display_name); } /* * dispatch table */ -typedef int (*command_fn) (int argc, char **argv); +typedef int (*command_fn) (int argc, char **argv, void *data); struct command { const char *name; @@ -465,10 +519,10 @@ static struct command _commands[] = { {"reload", " ", 2, 2, _reload}, {"rename", " ", 2, 2, _rename}, {"ls", "", 0, 0, _ls}, - {"info", "", 1, 1, _info}, - {"deps", "", 1, 1, _deps}, - {"status", "", 1, 1, _status}, - {"table", "", 1, 1, _status}, + {"info", "[]", 0, 1, _info}, + {"deps", "[]", 0, 1, _deps}, + {"status", "[]", 0, 1, _status}, + {"table", "[]", 0, 1, _status}, {"wait", "", 1, 1, _wait}, {"version", "", 0, 0, _version}, {NULL, NULL, 0, 0, NULL} @@ -575,7 +629,7 @@ int main(int argc, char **argv) } doit: - if (!c->fn(argc, argv)) { + if (!c->fn(argc, argv, NULL)) { fprintf(stderr, "Command failed\n"); exit(1); } -- 2.43.5