svn commit: r313190 - head/sbin/nvmecontrol
Warner Losh
imp at FreeBSD.org
Sat Feb 4 05:52:54 UTC 2017
Author: imp
Date: Sat Feb 4 05:52:53 2017
New Revision: 313190
URL: https://svnweb.freebsd.org/changeset/base/313190
Log:
Move the usage and command name lookup into functions.
Modified:
head/sbin/nvmecontrol/nvmecontrol.c
head/sbin/nvmecontrol/nvmecontrol.h
Modified: head/sbin/nvmecontrol/nvmecontrol.c
==============================================================================
--- head/sbin/nvmecontrol/nvmecontrol.c Sat Feb 4 05:52:51 2017 (r313189)
+++ head/sbin/nvmecontrol/nvmecontrol.c Sat Feb 4 05:52:53 2017 (r313190)
@@ -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 *c
int
main(int argc, char *argv[])
{
- struct nvme_function *f;
if (argc < 2)
- usage();
-
- f = funcs;
- while (f->name != NULL) {
- if (strcmp(argv[1], f->name) == 0)
- f->fn(argc-1, &argv[1]);
- f++;
- }
+ gen_usage(funcs);
- usage();
+ dispatch(argc, argv, funcs);
return (0);
}
Modified: head/sbin/nvmecontrol/nvmecontrol.h
==============================================================================
--- head/sbin/nvmecontrol/nvmecontrol.h Sat Feb 4 05:52:51 2017 (r313189)
+++ head/sbin/nvmecontrol/nvmecontrol.h Sat Feb 4 05:52:53 2017 (r313190)
@@ -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 nsi
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
More information about the svn-src-all
mailing list