static int escape(char **dst, const char *src, const char *special_chars,

                  enum EscapeMode mode)

{

    AVBPrint dstbuf;



    av_bprint_init(&dstbuf, 1, AV_BPRINT_SIZE_UNLIMITED);



    switch (mode) {

    case ESCAPE_MODE_FULL:

    case ESCAPE_MODE_LAZY:

        /* \-escape characters */



        if (mode == ESCAPE_MODE_LAZY && strchr(WHITESPACES, *src))

            av_bprintf(&dstbuf, "\\%c", *src++);



        for (; *src; src++) {

            if ((special_chars && strchr(special_chars, *src)) ||

                strchr("'\\", *src) ||

                (mode == ESCAPE_MODE_FULL && strchr(WHITESPACES, *src)))

                av_bprintf(&dstbuf, "\\%c", *src);

            else

                av_bprint_chars(&dstbuf, *src, 1);

        }



        if (mode == ESCAPE_MODE_LAZY && strchr(WHITESPACES, dstbuf.str[dstbuf.len-1])) {

            char c = dstbuf.str[dstbuf.len-1];

            dstbuf.str[dstbuf.len-1] = '\\';

            av_bprint_chars(&dstbuf, c, 1);

        }

        break;



    case ESCAPE_MODE_QUOTE:

        /* enclose between '' the string */

        av_bprint_chars(&dstbuf, '\'', 1);

        for (; *src; src++) {

            if (*src == '\'')

                av_bprintf(&dstbuf, "'\\''");

            else

                av_bprint_chars(&dstbuf, *src, 1);

        }

        av_bprint_chars(&dstbuf, '\'', 1);

        break;



    default:

        /* unknown escape mode */

        return AVERROR(EINVAL);

    }



    if (!av_bprint_is_complete(&dstbuf)) {

        av_bprint_finalize(&dstbuf, NULL);

        return AVERROR(ENOMEM);

    } else {

        av_bprint_finalize(&dstbuf, dst);

        return 0;

    }

}

static int escape(char **dst, const char *src, const char *special_chars,

                  enum EscapeMode mode)

{

    AVBPrint dstbuf;



    av_bprint_init(&dstbuf, 1, AV_BPRINT_SIZE_UNLIMITED);



    switch (mode) {

    case ESCAPE_MODE_FULL:

    case ESCAPE_MODE_LAZY:

        



        if (mode == ESCAPE_MODE_LAZY && strchr(WHITESPACES, *src))

            av_bprintf(&dstbuf, "\\%c", *src++);



        for (; *src; src++) {

            if ((special_chars && strchr(special_chars, *src)) ||

                strchr("'\\", *src) ||

                (mode == ESCAPE_MODE_FULL && strchr(WHITESPACES, *src)))

                av_bprintf(&dstbuf, "\\%c", *src);

            else

                av_bprint_chars(&dstbuf, *src, 1);

        }



        if (mode == ESCAPE_MODE_LAZY && strchr(WHITESPACES, dstbuf.str[dstbuf.len-1])) {

            char c = dstbuf.str[dstbuf.len-1];

            dstbuf.str[dstbuf.len-1] = '\\';

            av_bprint_chars(&dstbuf, c, 1);

        }

        break;



    case ESCAPE_MODE_QUOTE:

        

        av_bprint_chars(&dstbuf, '\'', 1);

        for (; *src; src++) {

            if (*src == '\'')

                av_bprintf(&dstbuf, "'\\''");

            else

                av_bprint_chars(&dstbuf, *src, 1);

        }

        av_bprint_chars(&dstbuf, '\'', 1);

        break;



    default:

        

        return AVERROR(EINVAL);

    }



    if (!av_bprint_is_complete(&dstbuf)) {

        av_bprint_finalize(&dstbuf, NULL);

        return AVERROR(ENOMEM);

    } else {

        av_bprint_finalize(&dstbuf, dst);

        return 0;

    }

}

static int FUNC_0(char **VAR_0, const char *VAR_1, const char *VAR_2,

                  enum EscapeMode VAR_3)

{

    AVBPrint dstbuf;



    av_bprint_init(&dstbuf, 1, AV_BPRINT_SIZE_UNLIMITED);



    switch (VAR_3) {

    case ESCAPE_MODE_FULL:

    case ESCAPE_MODE_LAZY:

        



        if (VAR_3 == ESCAPE_MODE_LAZY && strchr(WHITESPACES, *VAR_1))

            av_bprintf(&dstbuf, "\\%VAR_4", *VAR_1++);



        for (; *VAR_1; VAR_1++) {

            if ((VAR_2 && strchr(VAR_2, *VAR_1)) ||

                strchr("'\\", *VAR_1) ||

                (VAR_3 == ESCAPE_MODE_FULL && strchr(WHITESPACES, *VAR_1)))

                av_bprintf(&dstbuf, "\\%VAR_4", *VAR_1);

            else

                av_bprint_chars(&dstbuf, *VAR_1, 1);

        }



        if (VAR_3 == ESCAPE_MODE_LAZY && strchr(WHITESPACES, dstbuf.str[dstbuf.len-1])) {

            char VAR_4 = dstbuf.str[dstbuf.len-1];

            dstbuf.str[dstbuf.len-1] = '\\';

            av_bprint_chars(&dstbuf, VAR_4, 1);

        }

        break;



    case ESCAPE_MODE_QUOTE:

        

        av_bprint_chars(&dstbuf, '\'', 1);

        for (; *VAR_1; VAR_1++) {

            if (*VAR_1 == '\'')

                av_bprintf(&dstbuf, "'\\''");

            else

                av_bprint_chars(&dstbuf, *VAR_1, 1);

        }

        av_bprint_chars(&dstbuf, '\'', 1);

        break;



    default:

        

        return AVERROR(EINVAL);

    }



    if (!av_bprint_is_complete(&dstbuf)) {

        av_bprint_finalize(&dstbuf, NULL);

        return AVERROR(ENOMEM);

    } else {

        av_bprint_finalize(&dstbuf, VAR_0);

        return 0;

    }

}

static int FUNC_0(char **VAR_0, const char *VAR_1, const char *VAR_2,
enum EscapeMode VAR_3)
{ AVBPrint dstbuf; av_bprint_init(&dstbuf, 1, AV_BPRINT_SIZE_UNLIMITED); switch (VAR_3) { case ESCAPE_MODE_FULL:
case ESCAPE_MODE_LAZY:
if (VAR_3 == ESCAPE_MODE_LAZY && strchr(WHITESPACES, *VAR_1))
av_bprintf(&dstbuf, "\\%VAR_4", *VAR_1++); for (; *VAR_1; VAR_1++) { if ((VAR_2 && strchr(VAR_2, *VAR_1)) ||
strchr("'\\", *VAR_1) ||
(VAR_3 == ESCAPE_MODE_FULL && strchr(WHITESPACES, *VAR_1)))
av_bprintf(&dstbuf, "\\%VAR_4", *VAR_1); else
av_bprint_chars(&dstbuf, *VAR_1, 1); } if (VAR_3 == ESCAPE_MODE_LAZY && strchr(WHITESPACES, dstbuf.str[dstbuf.len-1])) { char VAR_4 = dstbuf.str[dstbuf.len-1]; dstbuf.str[dstbuf.len-1] = '\\'; av_bprint_chars(&dstbuf, VAR_4, 1); } break; case ESCAPE_MODE_QUOTE:
av_bprint_chars(&dstbuf, '\'', 1); for (; *VAR_1; VAR_1++) { if (*VAR_1 == '\'')
av_bprintf(&dstbuf, "'\\''"); else
av_bprint_chars(&dstbuf, *VAR_1, 1); } av_bprint_chars(&dstbuf, '\'', 1); break; default:
return AVERROR(EINVAL); } if (!av_bprint_is_complete(&dstbuf)) { av_bprint_finalize(&dstbuf, NULL); return AVERROR(ENOMEM); } else { av_bprint_finalize(&dstbuf, VAR_0); return 0; } }