[sheepdog] [PATCH] collie: correct command-line options parser

Liu Yuan namei.unix at gmail.com
Fri Mar 15 09:46:59 CET 2013


On 03/15/2013 02:00 PM, ChenZhe wrote:
> From: ChenZhe <chenzhe at xinnet.com>
> 
> "collie cluster recover disable -p7001" not work.
> getopt_long() will reorder the options in argv.
> so, we need to skip one more argument before getopt() for the subcmd who need third arg.
> 
> Signed-off-by: ChenZhe <chenzhe at xinnet.com>
> Signed-off-by: ChenZhe <cz at de3eb.cn>
> ---
>  collie/collie.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> diff --git a/collie/collie.c b/collie/collie.c
> index 08c78eb..2d05f3d 100644
> --- a/collie/collie.c
> +++ b/collie/collie.c
> @@ -348,6 +348,9 @@ int main(int argc, char **argv)
>  	long_options = build_long_options(sd_opts);
>  	short_options = build_short_options(sd_opts);
>  
> +	if(flags & SUBCMD_FLAG_NEED_THIRD_ARG && argc > 3)
> +		optind++;
> +
>  	while ((ch = getopt_long(argc, argv, short_options, long_options,
>  				&longindex)) >= 0) {
>  
> @@ -391,7 +394,7 @@ int main(int argc, char **argv)
>  		}
>  	}
>  
> -	if (flags & SUBCMD_FLAG_NEED_THIRD_ARG && argc == optind)

Kazutaka, what does argc == optind mean?

> +	if (flags & SUBCMD_FLAG_NEED_THIRD_ARG && optind <= 3)
>  		subcommand_usage(argv[1], argv[2], EXIT_USAGE);
>  
>  	return command_fn(argc, argv);
> 

Kazutaka, this bug does exist (even with '-p 7001'), but 'optind <= 3'
looks quite suspicious to me, could you review it?

Thanks,
Yuan



More information about the sheepdog mailing list