static int url_alloc_for_protocol(URLContext **puc, struct URLProtocol *up,

                                  const char *filename, int flags,

                                  const AVIOInterruptCB *int_cb)

{

    URLContext *uc;

    int err;



#if CONFIG_NETWORK

    if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init())

        return AVERROR(EIO);

#endif

    uc = av_mallocz(sizeof(URLContext) + strlen(filename) + 1);

    if (!uc) {

        err = AVERROR(ENOMEM);

        goto fail;

    }

    uc->av_class = &ffurl_context_class;

    uc->filename = (char *)&uc[1];

    strcpy(uc->filename, filename);

    uc->prot            = up;

    uc->flags           = flags;

    uc->is_streamed     = 0; /* default = not streamed */

    uc->max_packet_size = 0; /* default: stream file */

    if (up->priv_data_size) {

        uc->priv_data = av_mallocz(up->priv_data_size);

        if (!uc->priv_data) {

            err = AVERROR(ENOMEM);

            goto fail;

        }

        if (up->priv_data_class) {

            *(const AVClass **)uc->priv_data = up->priv_data_class;

            av_opt_set_defaults(uc->priv_data);

        }

    }

    if (int_cb)

        uc->interrupt_callback = *int_cb;



    *puc = uc;

    return 0;

fail:

    *puc = NULL;

    if (uc)

        av_freep(&uc->priv_data);

    av_freep(&uc);

#if CONFIG_NETWORK

    if (up->flags & URL_PROTOCOL_FLAG_NETWORK)

        ff_network_close();

#endif

    return err;

}

static int url_alloc_for_protocol(URLContext **puc, struct URLProtocol *up,

                                  const char *filename, int flags,

                                  const AVIOInterruptCB *int_cb)

{

    URLContext *uc;

    int err;



#if CONFIG_NETWORK

    if (up->flags & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init())

        return AVERROR(EIO);

#endif

    uc = av_mallocz(sizeof(URLContext) + strlen(filename) + 1);

    if (!uc) {

        err = AVERROR(ENOMEM);

        goto fail;

    }

    uc->av_class = &ffurl_context_class;

    uc->filename = (char *)&uc[1];

    strcpy(uc->filename, filename);

    uc->prot            = up;

    uc->flags           = flags;

    uc->is_streamed     = 0; 

    uc->max_packet_size = 0; 

    if (up->priv_data_size) {

        uc->priv_data = av_mallocz(up->priv_data_size);

        if (!uc->priv_data) {

            err = AVERROR(ENOMEM);

            goto fail;

        }

        if (up->priv_data_class) {

            *(const AVClass **)uc->priv_data = up->priv_data_class;

            av_opt_set_defaults(uc->priv_data);

        }

    }

    if (int_cb)

        uc->interrupt_callback = *int_cb;



    *puc = uc;

    return 0;

fail:

    *puc = NULL;

    if (uc)

        av_freep(&uc->priv_data);

    av_freep(&uc);

#if CONFIG_NETWORK

    if (up->flags & URL_PROTOCOL_FLAG_NETWORK)

        ff_network_close();

#endif

    return err;

}

static int FUNC_0(URLContext **VAR_0, struct URLProtocol *VAR_1,

                                  const char *VAR_2, int VAR_3,

                                  const AVIOInterruptCB *VAR_4)

{

    URLContext *uc;

    int VAR_5;



#if CONFIG_NETWORK

    if (VAR_1->VAR_3 & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init())

        return AVERROR(EIO);

#endif

    uc = av_mallocz(sizeof(URLContext) + strlen(VAR_2) + 1);

    if (!uc) {

        VAR_5 = AVERROR(ENOMEM);

        goto fail;

    }

    uc->av_class = &ffurl_context_class;

    uc->VAR_2 = (char *)&uc[1];

    strcpy(uc->VAR_2, VAR_2);

    uc->prot            = VAR_1;

    uc->VAR_3           = VAR_3;

    uc->is_streamed     = 0; 

    uc->max_packet_size = 0; 

    if (VAR_1->priv_data_size) {

        uc->priv_data = av_mallocz(VAR_1->priv_data_size);

        if (!uc->priv_data) {

            VAR_5 = AVERROR(ENOMEM);

            goto fail;

        }

        if (VAR_1->priv_data_class) {

            *(const AVClass **)uc->priv_data = VAR_1->priv_data_class;

            av_opt_set_defaults(uc->priv_data);

        }

    }

    if (VAR_4)

        uc->interrupt_callback = *VAR_4;



    *VAR_0 = uc;

    return 0;

fail:

    *VAR_0 = NULL;

    if (uc)

        av_freep(&uc->priv_data);

    av_freep(&uc);

#if CONFIG_NETWORK

    if (VAR_1->VAR_3 & URL_PROTOCOL_FLAG_NETWORK)

        ff_network_close();

#endif

    return VAR_5;

}

static int FUNC_0(URLContext **VAR_0, struct URLProtocol *VAR_1,
const char *VAR_2, int VAR_3,
const AVIOInterruptCB *VAR_4)
{ URLContext *uc; int VAR_5; #if CONFIG_NETWORK
if (VAR_1->VAR_3 & URL_PROTOCOL_FLAG_NETWORK && !ff_network_init())
return AVERROR(EIO); #endif
uc = av_mallocz(sizeof(URLContext) + strlen(VAR_2) + 1); if (!uc) { VAR_5 = AVERROR(ENOMEM); goto fail; } uc->av_class = &ffurl_context_class; uc->VAR_2 = (char *)&uc[1]; strcpy(uc->VAR_2, VAR_2); uc->prot            = VAR_1; uc->VAR_3           = VAR_3; uc->is_streamed     = 0; uc->max_packet_size = 0; if (VAR_1->priv_data_size) { uc->priv_data = av_mallocz(VAR_1->priv_data_size); if (!uc->priv_data) { VAR_5 = AVERROR(ENOMEM); goto fail; } if (VAR_1->priv_data_class) { *(const AVClass **)uc->priv_data = VAR_1->priv_data_class; av_opt_set_defaults(uc->priv_data); } } if (VAR_4)
uc->interrupt_callback = *VAR_4; *VAR_0 = uc; return 0; fail:
*VAR_0 = NULL; if (uc)
av_freep(&uc->priv_data); av_freep(&uc); #if CONFIG_NETWORK
if (VAR_1->VAR_3 & URL_PROTOCOL_FLAG_NETWORK)
ff_network_close(); #endif
return VAR_5; }