static const struct URLProtocol *url_find_protocol(const char *filename)

{

    const URLProtocol **protocols;

    char proto_str[128], proto_nested[128], *ptr;

    size_t proto_len = strspn(filename, URL_SCHEME_CHARS);

    int i;



    if (filename[proto_len] != ':' &&

        (strncmp(filename, "subfile,", 8) || !strchr(filename + proto_len + 1, ':')) ||

        is_dos_path(filename))

        strcpy(proto_str, "file");

    else

        av_strlcpy(proto_str, filename,

                   FFMIN(proto_len + 1, sizeof(proto_str)));



    if ((ptr = strchr(proto_str, ',')))

        *ptr = '\0';

    av_strlcpy(proto_nested, proto_str, sizeof(proto_nested));

    if ((ptr = strchr(proto_nested, '+')))

        *ptr = '\0';



    protocols = ffurl_get_protocols(NULL, NULL);



    for (i = 0; protocols[i]; i++) {

            const URLProtocol *up = protocols[i];

        if (!strcmp(proto_str, up->name)) {

            av_freep(&protocols);

            return up;

        }

        if (up->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME &&

            !strcmp(proto_nested, up->name)) {

            av_freep(&protocols);

            return up;

        }

    }

    av_freep(&protocols);




}
static const struct URLProtocol *url_find_protocol(const char *filename)

{

    const URLProtocol **protocols;

    char proto_str[128], proto_nested[128], *ptr;

    size_t proto_len = strspn(filename, URL_SCHEME_CHARS);

    int i;



    if (filename[proto_len] != ':' &&

        (strncmp(filename, "subfile,", 8) || !strchr(filename + proto_len + 1, ':')) ||

        is_dos_path(filename))

        strcpy(proto_str, "file");

    else

        av_strlcpy(proto_str, filename,

                   FFMIN(proto_len + 1, sizeof(proto_str)));



    if ((ptr = strchr(proto_str, ',')))

        *ptr = '\0';

    av_strlcpy(proto_nested, proto_str, sizeof(proto_nested));

    if ((ptr = strchr(proto_nested, '+')))

        *ptr = '\0';



    protocols = ffurl_get_protocols(NULL, NULL);



    for (i = 0; protocols[i]; i++) {

            const URLProtocol *up = protocols[i];

        if (!strcmp(proto_str, up->name)) {

            av_freep(&protocols);

            return up;

        }

        if (up->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME &&

            !strcmp(proto_nested, up->name)) {

            av_freep(&protocols);

            return up;

        }

    }

    av_freep(&protocols);




}
static const struct URLProtocol *FUNC_0(const char *VAR_0)

{

    const URLProtocol **VAR_1;

    char VAR_2[128], VAR_3[128], *VAR_4;

    size_t proto_len = strspn(VAR_0, URL_SCHEME_CHARS);

    int VAR_5;



    if (VAR_0[proto_len] != ':' &&

        (strncmp(VAR_0, "subfile,", 8) || !strchr(VAR_0 + proto_len + 1, ':')) ||

        is_dos_path(VAR_0))

        strcpy(VAR_2, "file");

    else

        av_strlcpy(VAR_2, VAR_0,

                   FFMIN(proto_len + 1, sizeof(VAR_2)));



    if ((VAR_4 = strchr(VAR_2, ',')))

        *VAR_4 = '\0';

    av_strlcpy(VAR_3, VAR_2, sizeof(VAR_3));

    if ((VAR_4 = strchr(VAR_3, '+')))

        *VAR_4 = '\0';



    VAR_1 = ffurl_get_protocols(NULL, NULL);



    for (VAR_5 = 0; VAR_1[VAR_5]; VAR_5++) {

            const URLProtocol *VAR_6 = VAR_1[VAR_5];

        if (!strcmp(VAR_2, VAR_6->name)) {

            av_freep(&VAR_1);

            return VAR_6;

        }

        if (VAR_6->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME &&

            !strcmp(VAR_3, VAR_6->name)) {

            av_freep(&VAR_1);

            return VAR_6;

        }

    }

    av_freep(&VAR_1);




}
static const struct URLProtocol *FUNC_0(const char *VAR_0)
{ const URLProtocol **VAR_1; char VAR_2[128], VAR_3[128], *VAR_4; size_t proto_len = strspn(VAR_0, URL_SCHEME_CHARS); int VAR_5; if (VAR_0[proto_len] != ':' &&
(strncmp(VAR_0, "subfile,", 8) || !strchr(VAR_0 + proto_len + 1, ':')) ||
is_dos_path(VAR_0))
strcpy(VAR_2, "file"); else
av_strlcpy(VAR_2, VAR_0,
FFMIN(proto_len + 1, sizeof(VAR_2))); if ((VAR_4 = strchr(VAR_2, ',')))
*VAR_4 = '\0'; av_strlcpy(VAR_3, VAR_2, sizeof(VAR_3)); if ((VAR_4 = strchr(VAR_3, '+')))
*VAR_4 = '\0'; VAR_1 = ffurl_get_protocols(NULL, NULL); for (VAR_5 = 0; VAR_1[VAR_5]; VAR_5++) { const URLProtocol *VAR_6 = VAR_1[VAR_5]; if (!strcmp(VAR_2, VAR_6->name)) { av_freep(&VAR_1); return VAR_6; } if (VAR_6->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME &&
!strcmp(VAR_3, VAR_6->name)) { av_freep(&VAR_1); return VAR_6; } } av_freep(&VAR_1); }