Author: mav
Date: Thu Feb  1 19:37:18 2018
New Revision: 328715
URL: https://svnweb.freebsd.org/changeset/base/328715

Log:
  MFC r313190 (by imp):
  Move the usage and command name lookup into functions.

Modified:
  stable/11/sbin/nvmecontrol/nvmecontrol.c
  stable/11/sbin/nvmecontrol/nvmecontrol.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sbin/nvmecontrol/nvmecontrol.c
==============================================================================
--- stable/11/sbin/nvmecontrol/nvmecontrol.c    Thu Feb  1 19:36:42 2018        
(r328714)
+++ stable/11/sbin/nvmecontrol/nvmecontrol.c    Thu Feb  1 19:37:18 2018        
(r328715)
@@ -45,13 +45,8 @@ __FBSDID("$FreeBSD$");
 
 #include "nvmecontrol.h"
 
-typedef void (*nvme_fn_t)(int argc, char *argv[]);
 
-static struct nvme_function {
-       const char      *name;
-       nvme_fn_t       fn;
-       const char      *usage;
-} funcs[] = {
+static struct nvme_function funcs[] = {
        {"devlist",     devlist,        DEVLIST_USAGE},
        {"identify",    identify,       IDENTIFY_USAGE},
        {"perftest",    perftest,       PERFTEST_USAGE},
@@ -62,12 +57,10 @@ static struct nvme_function {
        {NULL,          NULL,           NULL},
 };
 
-static void
-usage(void)
+void
+gen_usage(struct nvme_function *f)
 {
-       struct nvme_function *f;
 
-       f = funcs;
        fprintf(stderr, "usage:\n");
        while (f->name != NULL) {
                fprintf(stderr, "%s", f->usage);
@@ -76,6 +69,21 @@ usage(void)
        exit(1);
 }
 
+void
+dispatch(int argc, char *argv[], struct nvme_function *tbl)
+{
+       struct nvme_function *f = tbl;
+
+       while (f->name != NULL) {
+               if (strcmp(argv[1], f->name) == 0)
+                       f->fn(argc-1, &argv[1]);
+               f++;
+       }
+
+       fprintf(stderr, "Unknown command: %s\n", argv[1]);
+       gen_usage(tbl);
+}
+
 static void
 print_bytes(void *data, uint32_t length)
 {
@@ -217,19 +225,11 @@ parse_ns_str(const char *ns_str, char *ctrlr_str, int 
 int
 main(int argc, char *argv[])
 {
-       struct nvme_function *f;
 
        if (argc < 2)
-               usage();
+               gen_usage(funcs);
 
-       f = funcs;
-       while (f->name != NULL) {
-               if (strcmp(argv[1], f->name) == 0)
-                       f->fn(argc-1, &argv[1]);
-               f++;
-       }
-
-       usage();
+       dispatch(argc, argv, funcs);
 
        return (0);
 }

Modified: stable/11/sbin/nvmecontrol/nvmecontrol.h
==============================================================================
--- stable/11/sbin/nvmecontrol/nvmecontrol.h    Thu Feb  1 19:36:42 2018        
(r328714)
+++ stable/11/sbin/nvmecontrol/nvmecontrol.h    Thu Feb  1 19:37:18 2018        
(r328715)
@@ -31,6 +31,14 @@
 
 #include <dev/nvme/nvme.h>
 
+typedef void (*nvme_fn_t)(int argc, char *argv[]);
+
+struct nvme_function {
+       const char      *name;
+       nvme_fn_t       fn;
+       const char      *usage;
+};
+
 #define NVME_CTRLR_PREFIX      "nvme"
 #define NVME_NS_PREFIX         "ns"
 
@@ -73,6 +81,8 @@ void read_namespace_data(int fd, int nsid, struct nvme
 void print_hex(void *data, uint32_t length);
 void read_logpage(int fd, uint8_t log_page, int nsid, void *payload,
     uint32_t payload_size);
+void gen_usage(struct nvme_function *);
+void dispatch(int argc, char *argv[], struct nvme_function *f);
 
 #endif
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to