From 68920b6c113f7e3dd873d4b2d98f712c187b3765 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sun, 2 Mar 2014 09:28:17 +0000 Subject: tool: Fixed libcurl source output for multiple operations Correctly output libcurl source code that includes multiply operations as specified by --next. Note that each operation evaluates to a single curl_easy_perform() in source code form. Also note that the output could be optimised a little so global config options are only output once rather than per operation as is presently the case. --- src/tool_easysrc.c | 4 +++- src/tool_operate.c | 70 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/tool_easysrc.c b/src/tool_easysrc.c index bf44b1c5c..3db27bb5a 100644 --- a/src/tool_easysrc.c +++ b/src/tool_easysrc.c @@ -154,14 +154,16 @@ CURLcode easysrc_perform(void) CHKRET(easysrc_add(&easysrc_code, "")); CHKRET(easysrc_add(&easysrc_code, "ret = curl_easy_perform(hnd);")); + CHKRET(easysrc_add(&easysrc_code, "")); + return CURLE_OK; } CURLcode easysrc_cleanup(void) { - CHKRET(easysrc_add(&easysrc_code, "")); CHKRET(easysrc_add(&easysrc_code, "curl_easy_cleanup(hnd);")); CHKRET(easysrc_add(&easysrc_code, "hnd = NULL;")); + return CURLE_OK; } diff --git a/src/tool_operate.c b/src/tool_operate.c index 02841c12a..03907e7bd 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -313,14 +313,6 @@ static CURLcode operate_do(struct GlobalConfig *global, } } -#ifndef CURL_DISABLE_LIBCURL_OPTION - res = easysrc_init(); - if(res) { - helpf(global->errors, "out of memory\n"); - goto quit_curl; - } -#endif - /* Single header file for all URLs */ if(config->headerfile) { /* open file for output: */ @@ -1760,26 +1752,15 @@ static CURLcode operate_do(struct GlobalConfig *global, /* Free list of given URLs */ clean_getout(config); -#ifndef CURL_DISABLE_LIBCURL_OPTION - easysrc_cleanup(); -#endif - hdrcbdata.heads = NULL; /* Close function-local opened file descriptors */ - if(heads.fopened && heads.stream) fclose(heads.stream); + if(heads.alloc_filename) Curl_safefree(heads.filename); -#ifndef CURL_DISABLE_LIBCURL_OPTION - /* Dump the libcurl code if previously enabled. - NOTE: that this function relies on config->errors amongst other things - so not everything can be closed and cleaned before this is called */ - dumpeasysrc(global); -#endif - /* Release metalink related resources here */ clean_metalink(config); @@ -1827,29 +1808,50 @@ CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[]) else result = CURLE_FAILED_INIT; } - /* Perform the main operations */ else { - size_t count = 0; - struct OperationConfig *operation = config->first; +#ifndef CURL_DISABLE_LIBCURL_OPTION + /* Initialise the libcurl source output */ + result = easysrc_init(); +#endif - /* Get the required aguments for each operation */ - while(!result && operation) { - result = get_args(operation, count++); + /* Perform the main operations */ + if(!result) { + size_t count = 0; + struct OperationConfig *operation = config->first; - operation = operation->next; - } + /* Get the required aguments for each operation */ + while(!result && operation) { + result = get_args(operation, count++); + + operation = operation->next; + } + + /* Set the current operation pointer */ + config->current = config->first; - /* Set the current operation pointer */ - config->current = config->first; + /* Perform each operation */ + while(!result && config->current) { + result = operate_do(config, config->current); - /* Perform each operation */ - while(!result && config->current) { - result = operate_do(config, config->current); + config->current = config->current->next; + } - config->current = config->current->next; +#ifndef CURL_DISABLE_LIBCURL_OPTION + /* Cleanup the libcurl source output */ + easysrc_cleanup(); +#endif } + else + helpf(config->errors, "out of memory\n"); } } +#ifndef CURL_DISABLE_LIBCURL_OPTION + /* Dump the libcurl code if previously enabled. + NOTE: that this function relies on config->errors amongst other things + so not everything can be closed and cleaned before this is called */ + dumpeasysrc(config); +#endif + return result; } -- cgit v1.2.3