count: Convert to new-style argument parsing

This commit is contained in:
Austin Clements 2012-01-13 18:07:02 -05:00 committed by David Bremner
parent e0d85656da
commit e40c01bb14

View file

@ -21,6 +21,11 @@
#include "notmuch-client.h" #include "notmuch-client.h"
enum {
OUTPUT_THREADS,
OUTPUT_MESSAGES,
};
int int
notmuch_count_command (void *ctx, int argc, char *argv[]) notmuch_count_command (void *ctx, int argc, char *argv[])
{ {
@ -28,35 +33,23 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
notmuch_database_t *notmuch; notmuch_database_t *notmuch;
notmuch_query_t *query; notmuch_query_t *query;
char *query_str; char *query_str;
int i; int opt_index;
notmuch_bool_t output_messages = TRUE; int output = OUTPUT_MESSAGES;
argc--; argv++; /* skip subcommand argument */ notmuch_opt_desc_t options[] = {
{ NOTMUCH_OPT_KEYWORD, &output, "output", 'o',
(notmuch_keyword_t []){ { "threads", OUTPUT_THREADS },
{ "messages", OUTPUT_MESSAGES },
{ 0, 0 } } },
{ 0, 0, 0, 0, 0 }
};
for (i = 0; i < argc && argv[i][0] == '-'; i++) { opt_index = parse_arguments (argc, argv, options, 1);
if (strcmp (argv[i], "--") == 0) {
i++; if (opt_index < 0) {
break; return 1;
}
if (STRNCMP_LITERAL (argv[i], "--output=") == 0) {
const char *opt = argv[i] + sizeof ("--output=") - 1;
if (strcmp (opt, "threads") == 0) {
output_messages = FALSE;
} else if (strcmp (opt, "messages") == 0) {
output_messages = TRUE;
} else {
fprintf (stderr, "Invalid value for --output: %s\n", opt);
return 1;
}
} else {
fprintf (stderr, "Unrecognized option: %s\n", argv[i]);
return 1;
}
} }
argc -= i;
argv += i;
config = notmuch_config_open (ctx, NULL, NULL); config = notmuch_config_open (ctx, NULL, NULL);
if (config == NULL) if (config == NULL)
return 1; return 1;
@ -66,7 +59,7 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
if (notmuch == NULL) if (notmuch == NULL)
return 1; return 1;
query_str = query_string_from_args (ctx, argc, argv); query_str = query_string_from_args (ctx, argc-opt_index, argv+opt_index);
if (query_str == NULL) { if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n"); fprintf (stderr, "Out of memory.\n");
return 1; return 1;
@ -82,10 +75,14 @@ notmuch_count_command (void *ctx, int argc, char *argv[])
return 1; return 1;
} }
if (output_messages) switch (output) {
case OUTPUT_MESSAGES:
printf ("%u\n", notmuch_query_count_messages (query)); printf ("%u\n", notmuch_query_count_messages (query));
else break;
case OUTPUT_THREADS:
printf ("%u\n", notmuch_query_count_threads (query)); printf ("%u\n", notmuch_query_count_threads (query));
break;
}
notmuch_query_destroy (query); notmuch_query_destroy (query);
notmuch_database_close (notmuch); notmuch_database_close (notmuch);