Signed-off-by: Jani Nikula <j...@nikula.org> --- notmuch-show.c | 61 ++++++++++++++++++++++++++++++++----------------------- 1 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/notmuch-show.c b/notmuch-show.c index 603992a..73b4557 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -923,12 +923,10 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) notmuch_database_t *notmuch; notmuch_query_t *query; char *query_string; - char *opt; const notmuch_show_format_t *format = &format_text; notmuch_show_params_t params; int mbox = 0; int format_specified = 0; - int i; params.entire_thread = 0; params.raw = 0; @@ -936,37 +934,50 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) params.cryptoctx = NULL; params.decrypt = 0; - argc--; argv++; /* skip subcommand argument */ - - for (i = 0; i < argc && argv[i][0] == '-'; i++) { - if (strcmp (argv[i], "--") == 0) { - i++; + while (1) { + int opt; + static struct option options[] = { + { "format", required_argument, NULL, 0 }, + { "part", required_argument, NULL, 1 }, + { "entire-thread", no_argument, NULL, 2 }, + { "decrypt", no_argument, NULL, 3 }, + { "verify", no_argument, NULL, 4 }, + { NULL, 0, NULL, 0 }, + }; + + opt = getopt_long (argc, argv, "", options, NULL); + if (opt == -1) break; - } - if (STRNCMP_LITERAL (argv[i], "--format=") == 0) { - opt = argv[i] + sizeof ("--format=") - 1; - if (strcmp (opt, "text") == 0) { + + switch (opt) { + case 0: + if (strcmp (optarg, "text") == 0) { format = &format_text; - } else if (strcmp (opt, "json") == 0) { + } else if (strcmp (optarg, "json") == 0) { format = &format_json; params.entire_thread = 1; - } else if (strcmp (opt, "mbox") == 0) { + } else if (strcmp (optarg, "mbox") == 0) { format = &format_mbox; mbox = 1; - } else if (strcmp (opt, "raw") == 0) { + } else if (strcmp (optarg, "raw") == 0) { format = &format_raw; params.raw = 1; } else { - fprintf (stderr, "Invalid value for --format: %s\n", opt); + fprintf (stderr, "Invalid value for --format: %s\n", optarg); return 1; } format_specified = 1; - } else if (STRNCMP_LITERAL (argv[i], "--part=") == 0) { - params.part = atoi(argv[i] + sizeof ("--part=") - 1); - } else if (STRNCMP_LITERAL (argv[i], "--entire-thread") == 0) { + break; + case 1: + params.part = atoi(optarg); + break; + case 2: params.entire_thread = 1; - } else if ((STRNCMP_LITERAL (argv[i], "--verify") == 0) || - (STRNCMP_LITERAL (argv[i], "--decrypt") == 0)) { + break; + case 3: + params.decrypt = 1; + /* fallthrough */ + case 4: if (params.cryptoctx == NULL) { GMimeSession* session = g_object_new(g_mime_session_get_type(), NULL); if (NULL == (params.cryptoctx = g_mime_gpg_context_new(session, "gpg"))) @@ -976,16 +987,14 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) g_object_unref (session); session = NULL; } - if (STRNCMP_LITERAL (argv[i], "--decrypt") == 0) - params.decrypt = 1; - } else { - fprintf (stderr, "Unrecognized option: %s\n", argv[i]); + break; + case '?': return 1; } } - argc -= i; - argv += i; + argc -= optind; + argv += optind; config = notmuch_config_open (ctx, NULL, NULL); if (config == NULL) -- 1.7.5.4 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch