ldomctl(8) describes much more commands than the poor usage:

        $ ldomctl
        usage: ldomctl start|stop|panic domain
               ldomctl status [domain]

Doing as vmctl already does, this diff turns it into

        usage:  ldomctl command [argument ...]
                ldomctl delete configuration
                ldomctl download directory
                ldomctl dump 
                ldomctl init-system file
                ldomctl list 
                ldomctl panic domain
                ldomctl select configuration
                ldomctl start domain
                ldomctl status [domain]
                ldomctl stop domain

The order of this output is lexicographically sorted exactly as in the
manual page.

OK?

Index: usr.sbin/ldomctl/ldomctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.c,v
retrieving revision 1.21
diff -u -p -r1.21 ldomctl.c
--- usr.sbin/ldomctl/ldomctl.c  15 Sep 2018 13:20:16 -0000      1.21
+++ usr.sbin/ldomctl/ldomctl.c  22 Jun 2019 16:10:40 -0000
@@ -37,6 +37,7 @@ extern struct ds_service pri_service;
 struct command {
        const char *cmd_name;
        void (*cmd_func)(int, char **);
+       const char *usage;
 };
 
 __dead void usage(void);
@@ -59,17 +60,17 @@ void guest_status(int argc, char **argv)
 void init_system(int argc, char **argv);
 
 struct command commands[] = {
-       { "download",   download },
-       { "dump",       dump },
-       { "list",       list },
-       { "select",     xselect },
-       { "delete",     delete },
-       { "start",      guest_start },
-       { "stop",       guest_stop },
-       { "panic",      guest_panic },
-       { "status",     guest_status },
-       { "init-system", init_system },
-       { NULL,         NULL }
+       { "delete",     delete,         "configuration" },
+       { "download",   download,       "directory" },
+       { "dump",       dump,           "" },
+       { "init-system", init_system,   "file" },
+       { "list",       list,           "" },
+       { "panic",      guest_panic,    "domain" },
+       { "select",     xselect,        "configuration" },
+       { "start",      guest_start,    "domain" },
+       { "status",     guest_status,   "[domain]" },
+       { "stop",       guest_stop,     "domain" },
+       { NULL }
 };
 
 void hv_open(void);
@@ -158,9 +159,13 @@ void
 usage(void)
 {
        extern char *__progname;
+       int i;
 
-       fprintf(stderr, "usage: %s start|stop|panic domain\n", __progname);
-       fprintf(stderr, "       %s status [domain]\n", __progname);
+       fprintf(stderr, "usage:\t%s command [argument ...]\n", __progname);
+       for (i = 0; commands[i].cmd_name != NULL; i++) {
+               fprintf(stderr, "\t%s %s %s\n", __progname,
+                   commands[i].cmd_name, commands[i].usage);
+       }
        exit(EXIT_FAILURE);
 }
 

Reply via email to