Nguyễn Thái Ngọc Duy  <pclo...@gmail.com> writes:

> -static int stat_opt(struct diff_options *options, const char **av)
> +static int diff_opt_stat(const struct option *opt, const char *value, int 
> unset)
>  {
> -     const char *arg = av[0];
> -     char *end;
> +     struct diff_options *options = opt->value;
> ...
> -     switch (*arg) {
> -     case '-':
> -             if (skip_prefix(arg, "-width", &arg)) {
> -                     if (*arg == '=')
> -                             width = strtoul(arg + 1, &end, 10);
> -                     else if (!*arg && !av[1])
> -                             die_want_option("--stat-width");
> -                     else if (!*arg) {
> -                             width = strtoul(av[1], &end, 10);
> -                             argcount = 2;
> -                     }
> ...
> +     if (!strcmp(opt->long_name, "stat")) {
> +             if (value) {
> +                     width = strtoul(value, &end, 10);
> +                     if (*end == ',')
> +                             name_width = strtoul(end+1, &end, 10);
> +                     if (*end == ',')
> +                             count = strtoul(end+1, &end, 10);
> +                     if (*end)
> +                             return error(_("invalid --stat value: %s"), 
> value);
>               }

It took me a while to recall and figure out what the original is
doing, primarily because the code was designed to handle both
"-$option $arg" and "--$option=$arg".  But thanks to the switch to
parse-options API, this helper no longer has to worry about that,
which is a very big plus.  It only needs to parse what is in value.

Very nice.

Reply via email to