diff --git a/src/tool_operate.c b/src/tool_operate.c index da76f55f4..a4e8069c8 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -184,6 +184,17 @@ static curl_off_t VmsSpecialSize(const char * name, } #endif /* __VMS */ +static CURLcode operate_init(struct Configurable *config) +{ + /* Get a curl handle to use for all forthcoming curl transfers */ + config->easy = curl_easy_init(); + if(!config->easy) { + helpf(config->errors, "error initializing curl easy handle\n"); + return CURLE_FAILED_INIT; + } + + return CURLE_OK; +} static int operate_do(struct Configurable *config, int argc, argv_item_t argv[]) { @@ -196,7 +207,7 @@ static int operate_do(struct Configurable *config, int argc, argv_item_t argv[]) metalinkfile *mlfile_last = NULL; - CURL *curl = NULL; + CURL *curl = config->easy; char *httpgetfields = NULL; int res = 0; @@ -212,14 +223,6 @@ static int operate_do(struct Configurable *config, int argc, argv_item_t argv[]) heads.stream = stdout; heads.config = config; - /* Get a curl handle to use for all forthcoming curl transfers */ - curl = curl_easy_init(); - if(!curl) { - helpf(config->errors, "error initializing curl easy handle\n"); - return CURLE_FAILED_INIT; - } - config->easy = curl; - /* ** Beyond this point no return'ing from this function allowed. ** Jump to label 'quit_curl' in order to abandon this function @@ -1842,5 +1845,13 @@ static int operate_do(struct Configurable *config, int argc, argv_item_t argv[]) int operate(struct Configurable *config, int argc, argv_item_t argv[]) { + int result = 0; + + /* Initialize the easy interface */ + result = operate_init(config); + if(result) + return result; + + /* Perform the main operation */ return operate_do(config, argc, argv); }