cli: abstract subcommand finding into a new function

Clean up code.
This commit is contained in:
Jani Nikula 2013-03-03 23:55:05 +02:00 committed by David Bremner
parent ed5150d2df
commit c1d1954469

View file

@ -70,6 +70,18 @@ static command_t commands[] = {
"This message, or more detailed help for the named command." } "This message, or more detailed help for the named command." }
}; };
static command_t *
find_command (const char *name)
{
size_t i;
for (i = 0; i < ARRAY_SIZE (commands); i++)
if (strcmp (name, commands[i].name) == 0)
return &commands[i];
return NULL;
}
int notmuch_format_version; int notmuch_format_version;
static void static void
@ -139,7 +151,6 @@ static int
notmuch_help_command (void *ctx, int argc, char *argv[]) notmuch_help_command (void *ctx, int argc, char *argv[])
{ {
command_t *command; command_t *command;
unsigned int i;
argc--; argv++; /* Ignore "help" */ argc--; argv++; /* Ignore "help" */
@ -158,14 +169,11 @@ notmuch_help_command (void *ctx, int argc, char *argv[])
return 0; return 0;
} }
for (i = 0; i < ARRAY_SIZE (commands); i++) { command = find_command (argv[0]);
command = &commands[i]; if (command) {
if (strcmp (argv[0], command->name) == 0) {
char *page = talloc_asprintf (ctx, "notmuch-%s", command->name); char *page = talloc_asprintf (ctx, "notmuch-%s", command->name);
exec_man (page); exec_man (page);
} }
}
if (strcmp (argv[0], "search-terms") == 0) { if (strcmp (argv[0], "search-terms") == 0) {
exec_man ("notmuch-search-terms"); exec_man ("notmuch-search-terms");
@ -247,10 +255,11 @@ int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
void *local; void *local;
char *talloc_report;
command_t *command; command_t *command;
unsigned int i;
notmuch_bool_t print_help=FALSE, print_version=FALSE; notmuch_bool_t print_help=FALSE, print_version=FALSE;
int opt_index; int opt_index;
int ret = 0;
notmuch_opt_desc_t options[] = { notmuch_opt_desc_t options[] = {
{ NOTMUCH_OPT_BOOLEAN, &print_help, "help", 'h', 0 }, { NOTMUCH_OPT_BOOLEAN, &print_help, "help", 'h', 0 },
@ -285,21 +294,21 @@ main (int argc, char *argv[])
return 0; return 0;
} }
for (i = 0; i < ARRAY_SIZE (commands); i++) { command = find_command (argv[opt_index]);
command = &commands[i]; if (!command) {
fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
if (strcmp (argv[opt_index], command->name) == 0) { argv[opt_index]);
int ret; return 1;
char *talloc_report; }
ret = (command->function)(local, argc - opt_index, argv + opt_index); ret = (command->function)(local, argc - opt_index, argv + opt_index);
talloc_report = getenv ("NOTMUCH_TALLOC_REPORT"); talloc_report = getenv ("NOTMUCH_TALLOC_REPORT");
/* this relies on the previous call to
* talloc_enable_null_tracking */
if (talloc_report && strcmp (talloc_report, "") != 0) { if (talloc_report && strcmp (talloc_report, "") != 0) {
/* this relies on the previous call to
* talloc_enable_null_tracking
*/
FILE *report = fopen (talloc_report, "w"); FILE *report = fopen (talloc_report, "w");
if (report) { if (report) {
talloc_report_full (NULL, report); talloc_report_full (NULL, report);
@ -310,14 +319,7 @@ main (int argc, char *argv[])
} }
} }
return ret;
}
}
fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
argv[1]);
talloc_free (local); talloc_free (local);
return 1; return ret;
} }