Move the usage and command name lookup into functions.
This commit is contained in:
parent
29740f4ce1
commit
ccac2ba7ec
@ -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 *nsid)
|
||||
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);
|
||||
}
|
||||
|
@ -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_namespace_data *nsdata);
|
||||
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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user