aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2014-01-19 12:20:01 +0000
committerSteve Holme <steve_holme@hotmail.com>2014-01-19 12:31:34 +0000
commitaba98991a50d7a4f2deb8fc3f9ddc5628a207da5 (patch)
tree170c920f1a17fea231bc8cb4f3f1775cb54b5c31
parentdb1beab1d7bd37948155ab741caae079053f92a8 (diff)
tool: Fixed incorrect return code if command line parser runs out of memory
In the rare instance where getparameter() may return PARAM_NO_MEM whilst parsing a URL, cURL would return this error code, which is equivalent to CURLE_FTP_ACCEPT_FAILED in cURL error codes terms. Instead, return CURLE_FAILED_INIT and output the failure reason as per the other usage of getparameter().
-rw-r--r--src/tool_operate.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/tool_operate.c b/src/tool_operate.c
index 7cb807734..801e5d47b 100644
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -286,12 +286,12 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
/* Parse options */
for(i = 1, stillflags = TRUE; i < argc; i++) {
+ char *orig_opt = argv[i];
+
if(stillflags &&
('-' == argv[i][0])) {
char *nextarg;
bool passarg;
- char *orig_opt = argv[i];
-
char *flag = argv[i];
if(curlx_strequal("--", argv[i]))
@@ -302,18 +302,7 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
nextarg = (i < (argc-1)) ? argv[i+1] : NULL;
res = getparameter(flag, nextarg, &passarg, config);
- if(res) {
- int retval = CURLE_OK;
- if(res != PARAM_HELP_REQUESTED) {
- const char *reason = param2text(res);
- helpf(config->errors, "option %s: %s\n", orig_opt, reason);
- retval = CURLE_FAILED_INIT;
- }
- res = retval;
- goto quit_curl;
- }
-
- if(passarg) /* we're supposed to skip this */
+ if(!res && passarg) /* we're supposed to skip this */
i++;
}
}
@@ -321,8 +310,17 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
bool used;
/* just add the URL please */
res = getparameter((char *)"--url", argv[i], &used, config);
- if(res)
- goto quit_curl;
+ }
+
+ if(res) {
+ int retval = CURLE_OK;
+ if(res != PARAM_HELP_REQUESTED) {
+ const char *reason = param2text(res);
+ helpf(config->errors, "option %s: %s\n", orig_opt, reason);
+ retval = CURLE_FAILED_INIT;
+ }
+ res = retval;
+ goto quit_curl;
}
}