Kevin Daudt <m...@ikke.info> writes:

> +static void unquote_quoted_string(struct strbuf *line)
> +{
> +     const char *in = strbuf_detach(line, NULL);
> +     int c, take_next_literally = 0;
> +     int found_error = 0;
> +
> +     /*
> +      * Stores the character that started the escape mode so that we know 
> what
> +      * character will stop it
> +      */
> +     char escape_context = 0;
> +
> +     while ((c = *in++) != 0) {
> +             if (take_next_literally) {
> +                     take_next_literally = 0;
> +             } else {
> +                     switch (c) {
> +                     case '"':
> +                             if (!escape_context)
> +                                     escape_context = '"';
> +                             else if (escape_context == '"')
> +                                     escape_context = 0;
> +                             continue;
> +                     case '\\':
> +                             if (escape_context) {
> +                                     take_next_literally = 1;
> +                                     continue;
> +                             }
> +                             break;
> +                     case '(':
> +                             if (!escape_context)
> +                                     escape_context = '(';
> +                             break;
> +                     case ')':
> +                             if (escape_context == '(')
> +                                     escape_context = 0;
> +                             break;
> +                     }
> +             }
> +
> +             strbuf_addch(line, c);
> +     }
> +}

The additional comment makes it very clear what is going on.

Is it an event unusual enough that is worth warning() about if we
have either take_next_literally or escape_context set to non-NUL
upon leaving the loop, I wonder?

Will queue.  Thanks.


Reply via email to