From 9c0d9784f6192bd0bbced5a6220baac91fdae292 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 20 Nov 2000 07:54:57 +0000 Subject: no more "leaked" memory when this fails on various kinds of bad usage --- src/main.c | 90 ++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/src/main.c b/src/main.c index b8e6875b9..a1d0e1c9c 100644 --- a/src/main.c +++ b/src/main.c @@ -1256,7 +1256,47 @@ void progressbarinit(struct ProgressData *bar) } -int main(int argc, char *argv[]) +void free_config_fields(struct Configurable *confp) +{ + if(confp->url) + free(confp->url); + if(confp->userpwd) + free(confp->userpwd); + if(confp->postfields) + free(confp->postfields); + if(confp->proxy) + free(confp->proxy); + if(confp->proxyuserpwd) + free(confp->proxyuserpwd); + if(confp->cookie) + free(confp->cookie); + if(confp->cookiefile) + free(confp->cookiefile); + if(confp->krb4level) + free(confp->krb4level); + if(confp->headerfile) + free(confp->headerfile); + if(confp->outfile) + free(confp->outfile); + if(confp->infile) + free(confp->infile); + if(confp->range) + free(confp->range); + if(confp->customrequest) + free(confp->customrequest); + if(confp->writeout) + free(confp->writeout); + if(confp->httppost) + curl_formfree(confp->httppost); + + curl_slist_free_all(confp->quote); /* the checks for confp->quote == NULL */ + curl_slist_free_all(confp->postquote); /* */ + curl_slist_free_all(confp->headers); /* */ +} + + +static int +operate(int argc, char *argv[]) { char errorbuffer[CURL_ERROR_SIZE]; char useragent[128]; /* buah, we don't want a larger default user agent */ @@ -1291,8 +1331,6 @@ int main(int argc, char *argv[]) curl_memdebug("memdump"); #endif - memset(&config, 0, sizeof(struct Configurable)); - config.showerror=TRUE; config.conf=CONF_DEFAULT; #if 0 @@ -1686,37 +1724,7 @@ int main(int argc, char *argv[]) printf("--%s--\n", MIMEseparator); #endif - if(config.url) - free(config.url); - if(config.userpwd) - free(config.userpwd); - if(config.postfields) - free(config.postfields); - if(config.proxy) - free(config.proxy); - if(config.proxyuserpwd) - free(config.proxyuserpwd); - if(config.cookie) - free(config.cookie); - if(config.cookiefile) - free(config.cookiefile); - if(config.krb4level) - free(config.krb4level); - if(config.headerfile) - free(config.headerfile); - if(config.outfile) - free(config.outfile); - if(config.infile) - free(config.infile); - if(config.range) - free(config.range); - if(config.customrequest) - free(config.customrequest); - if(config.writeout) - free(config.writeout); - - if(config.httppost) - curl_formfree(config.httppost); + free_config_fields(&config); if(allocuseragent) free(config.useragent); @@ -1724,9 +1732,17 @@ int main(int argc, char *argv[]) /* cleanup memory used for URL globbing patterns */ glob_cleanup(urls); - curl_slist_free_all(config.quote); /* the checks for config.quote == NULL */ - curl_slist_free_all(config.postquote); /* */ - curl_slist_free_all(config.headers); /* */ + return res; +} + + +int main(int argc, char *argv[]) +{ + int res; + memset(&config, 0, sizeof(struct Configurable)); + + res = operate(argc, argv); + free_config_fields(&config); return res; } -- cgit v1.2.3