On Fri, Sep 15, 2017 at 07:02:46PM +0200, Michal Suchanek wrote:

>       for (i = 0; args[i]; i++) {
> -             if (isspace(args[i]) && !in_quote)
> +             if (isspace(args[i]) && !in_quote && !backslash)
>                       break;
> -             if (equals == 0) {
> -                     if (args[i] == '=')
> -                             equals = i;
> +
> +             if ((equals == 0) && (args[i] == '='))
> +                     equals = i;
> +
> +             if (!backslash) {
> +                     if ((args[i] == '"') || (args[i] == '\\')) {
> +                             if (args[i] == '"')
> +                                     in_quote = !in_quote;
> +                             if (args[i] == '\\')
> +                                     backslash = 1;
> +
> +                             memmove(args + 1, args, i);
> +                             args++;
> +                             i--;
> +                     }
> +             } else {
> +                     backslash = 0;
>               }
> -             if (args[i] == '"')
> -                     in_quote = !in_quote;
>       }

... and that makes for Unidiomatic Work With Strings Award for this September.
Using memmove() for string rewrite is almost always bad taste; in this case
it's also (as usual) broken.

Reply via email to