From 01270673a3649e6bae22d266e4b5e62ad48698de Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Tue, 12 Sep 2017 15:10:42 +0200 Subject: [PATCH] rots: add list of subcommands with descriptions and implement usage --- source/main.c | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/source/main.c b/source/main.c index ea03a6d..b44d6f7 100644 --- a/source/main.c +++ b/source/main.c @@ -8,27 +8,47 @@ #include #include -struct entry_point { +struct entry { const char *cmd; int (* main)(int argc, char *argv[]); + char *desc; }; -struct entry_point entries[] = { - { "get-offset", do_get_offset }, - { "get-size", do_get_size }, - { "pack", do_pack }, - { "sign", do_sign }, - { "unpack", do_unpack }, - { "verify", do_verify }, - { NULL, NULL }, +struct entry entries[] = { + { "get-offset", do_get_offset, + "print the offset of the payload within an image" }, + { "get-size", do_get_size, + "print the size of the payload within an image" }, + { "pack", do_pack, + "pack the payload within an image" }, + { "sign", do_sign, + "sign an image" }, + { "unpack", do_unpack, + "unpack the payload of an image" }, + { "verify", do_verify, + "verify the signatures of an image" }, + { NULL, NULL, NULL }, }; +static void show_usage(const char *prog_name) +{ + struct entry *entry; + + fprintf(stderr, "usage: %s ...\n\n" + "ROTS utilities to work with signed images\n\n" + "Available commands:\n", prog_name); + + for (entry = entries; entry->cmd; ++entry) { + fprintf(stderr, "\t%-16s %-80s\n", entry->cmd, entry->desc); + } +} + int main(int argc, char *argv[]) { - struct entry_point *entry; + struct entry *entry; if (argc < 2) { - fprintf(stderr, "usage: %s \n", argv[0]); + show_usage(argv[0]); return -1; } @@ -37,6 +57,7 @@ int main(int argc, char *argv[]) return entry->main(argc, argv); } - fprintf(stderr, "usage: %s \n", argv[0]); + show_usage(argv[0]); + return -1; }