[PATCH 3/4] notmuch-restore: convert to notmuch-opts argument handling.

Jani Nikula jani at nikula.org
Tue Dec 6 12:48:50 PST 2011


On Sun,  4 Dec 2011 11:47:54 -0400, David Bremner <david at tethera.net> wrote:
> From: David Bremner <bremner at debian.org>
> 
> The new argument handling is a bit more concise, and bit more
> flexible.  It allows the input file name to go before the --accumulate
> option.
> ---
>  notmuch-restore.c |   38 ++++++++++++++++----------------------
>  1 files changed, 16 insertions(+), 22 deletions(-)
> 
> diff --git a/notmuch-restore.c b/notmuch-restore.c
> index 13b4325..d0aa7a8 100644
> --- a/notmuch-restore.c
> +++ b/notmuch-restore.c
> @@ -18,9 +18,8 @@
>   * Author: Carl Worth <cworth at cworth.org>
>   */
>  
> -#include <getopt.h>
> -
>  #include "notmuch-client.h"
> +#include "notmuch-opts.h"

I guess this will eventually be included almost everywhere, so in that
sense could be put in notmuch-client.h too.

>  
>  int
>  notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
> @@ -29,12 +28,14 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
>      notmuch_database_t *notmuch;
>      notmuch_bool_t synchronize_flags;
>      notmuch_bool_t accumulate = FALSE;
> +    char *input_file_name = NULL;
>      FILE *input = stdin;
>      char *line = NULL;
>      size_t line_size;
>      ssize_t line_len;
>      regex_t regex;
>      int rerr;
> +    int opt_index;
>  
>      config = notmuch_config_open (ctx, NULL, NULL);
>      if (config == NULL)
> @@ -47,37 +48,30 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
>  
>      synchronize_flags = notmuch_config_get_maildir_synchronize_flags (config);
>  
> -    struct option options[] = {
> -	{ "accumulate",   no_argument,       0, 'a' },
> -	{ 0, 0, 0, 0}
> +    notmuch_opt_desc_t options[] = {
> +	{ "in-file", 'i', NOTMUCH_OPT_POSITION, 0, &input_file_name },

Unless I'm mistaken in review of patch 1, specifying the input file
using --in-file=file doesn't work; it only works as a positional
argument.

> +	{ "accumulate", 'a',  NOTMUCH_OPT_BOOLEAN, 0, &accumulate },
> +	{ 0, 0, 0, 0, 0 }
>      };
>  
> -    int opt;
> -    do {
> -	opt = getopt_long (argc, argv, "", options, NULL);
> +    opt_index = notmuch_parse_args (argc, argv, options, 1);
>  
> -	switch (opt) {
> -	case 'a':
> -	    accumulate = 1;
> -	    break;
> -	case '?':
> -	    return 1;
> -	    break;
> -	}
> -
> -    } while (opt != -1);
> +    if (opt_index < 0) {
> +	/* diagnostics already printed */
> +	exit(1);

return 1 rather than exit(1)?

BR,
Jani.

> +    }
>  
> -    if (optind < argc) {
> -	input = fopen (argv[optind], "r");
> +    if (input_file_name) {
> +	input = fopen (input_file_name, "r");
>  	if (input == NULL) {
>  	    fprintf (stderr, "Error opening %s for reading: %s\n",
> -		     argv[optind], strerror (errno));
> +		     input_file_name, strerror (errno));
>  	    return 1;
>  	}
>  	optind++;
>      }
>  
> -    if (optind < argc) {
> +    if (opt_index < argc) {
>  	fprintf (stderr,
>  	 "Cannot read dump from more than one file: %s\n",
>  		 argv[optind]);
> -- 
> 1.7.7.3
> 
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list