diff options
-rw-r--r-- | src/tool_main.c | 41 | ||||
-rw-r--r-- | src/tool_operate.c | 13 | ||||
-rw-r--r-- | src/tool_operhlp.c | 26 | ||||
-rw-r--r-- | src/tool_operhlp.h | 4 |
4 files changed, 39 insertions, 45 deletions
diff --git a/src/tool_main.c b/src/tool_main.c index 5682bd78e..ba9b518e1 100644 --- a/src/tool_main.c +++ b/src/tool_main.c @@ -116,6 +116,32 @@ static void memory_tracking_init(void) #endif /* + * This is the main global constructor for the app. Call this before + * _any_ libcurl usage. If this fails, *NO* libcurl functions may be + * used, or havoc may be the result. + */ +static CURLcode main_init(void) +{ +#if defined(__DJGPP__) || defined(__GO32__) + /* stop stat() wasting time */ + _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; +#endif + + return curl_global_init(CURL_GLOBAL_DEFAULT); +} + +/* + * This is the main global destructor for the app. Call this after + * _all_ libcurl usage is done. + */ +static void main_free(void) +{ + curl_global_cleanup(); + convert_cleanup(); + metalink_cleanup(); +} + +/* ** curl tool main function. */ int main(int argc, char *argv[]) @@ -139,8 +165,19 @@ int main(int argc, char *argv[]) /* Initialise the config */ init_config(config); - /* Start our curl operation */ - res = operate(config, argc, argv); + /* Initialize the curl library - do not call any libcurl functions before + this point */ + if(!main_init()) { + /* Start our curl operation */ + res = operate(config, argc, argv); + + /* Perform the main cleanup */ + main_free(); + } + else { + helpf(config->errors, "error initializing curl library\n"); + res = CURLE_FAILED_INIT; + } #ifdef __SYMBIAN32__ if(config->showerror) diff --git a/src/tool_operate.c b/src/tool_operate.c index c3ccfe7f1..ce7bceea6 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -214,19 +214,9 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[]) heads.stream = stdout; heads.config = config; - /* - ** Initialize curl library - do not call any libcurl functions before - ** this point. - */ - if(main_init() != CURLE_OK) { - helpf(config->errors, "error initializing curl library\n"); - return CURLE_FAILED_INIT; - } - /* Get libcurl info right away */ if(get_libcurl_info() != CURLE_OK) { helpf(config->errors, "error retrieving curl library information\n"); - main_free(); return CURLE_FAILED_INIT; } @@ -234,7 +224,6 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[]) curl = curl_easy_init(); if(!curl) { helpf(config->errors, "error initializing curl easy handle\n"); - main_free(); return CURLE_FAILED_INIT; } config->easy = curl; @@ -1892,7 +1881,5 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[]) /* Release metalink related resources here */ clean_metalink(config); - main_free(); /* cleanup */ - return res; } diff --git a/src/tool_operhlp.c b/src/tool_operhlp.c index b8c0a2971..a9dab9b80 100644 --- a/src/tool_operhlp.c +++ b/src/tool_operhlp.c @@ -193,29 +193,3 @@ CURLcode get_url_file_name(char **filename, const char *url) return CURLE_OK; } -/* - * This is the main global constructor for the app. Call this before - * _any_ libcurl usage. If this fails, *NO* libcurl functions may be - * used, or havoc may be the result. - */ -CURLcode main_init(void) -{ -#if defined(__DJGPP__) || defined(__GO32__) - /* stop stat() wasting time */ - _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; -#endif - - return curl_global_init(CURL_GLOBAL_DEFAULT); -} - -/* - * This is the main global destructor for the app. Call this after - * _all_ libcurl usage is done. - */ -void main_free(void) -{ - curl_global_cleanup(); - convert_cleanup(); - metalink_cleanup(); -} - diff --git a/src/tool_operhlp.h b/src/tool_operhlp.h index c2365c88f..7ca12362b 100644 --- a/src/tool_operhlp.h +++ b/src/tool_operhlp.h @@ -37,9 +37,5 @@ char *add_file_name_to_url(CURL *curl, char *url, const char *filename); CURLcode get_url_file_name(char **filename, const char *url); -CURLcode main_init(void); - -void main_free(void); - #endif /* HEADER_CURL_TOOL_OPERHLP_H */ |