aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2014-03-02 09:28:17 +0000
committerSteve Holme <steve_holme@hotmail.com>2014-03-02 09:44:18 +0000
commit68920b6c113f7e3dd873d4b2d98f712c187b3765 (patch)
tree58a5d508067ba68c21df022d12963c695e3f5571
parent46b1d0a047faa9afa1de506adb8342f972e0918c (diff)
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.
-rw-r--r--src/tool_easysrc.c4
-rw-r--r--src/tool_operate.c70
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;
}