From b811200f647ba465e3e43ab7bdb42aa0fa671c98 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sun, 2 Feb 2014 14:21:53 +0000 Subject: tool_operate: Moved main initialisation and cleanup code into tool_main --- src/tool_main.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'src/tool_main.c') 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 @@ -115,6 +115,32 @@ static void memory_tracking_init(void) # define memory_tracking_init() Curl_nop_stmt #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. */ @@ -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) -- cgit v1.2.3