diff --git a/src/tool_getparam.c b/src/tool_getparam.c index dcb358411..2938f88b2 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -1847,3 +1847,47 @@ ParameterError getparameter(char *flag, /* f or -long-flag */ return PARAM_OK; } + +ParameterError parse_args(struct Configurable *config, int argc, + argv_item_t argv[]) +{ + int i; + bool stillflags; + char *orig_opt; + ParameterError result = PARAM_OK; + + for(i = 1, stillflags = TRUE; i < argc && !result; i++) { + orig_opt = argv[i]; + + if(stillflags && ('-' == argv[i][0])) { + char *nextarg; + bool passarg; + char *flag = argv[i]; + + if(curlx_strequal("--", argv[i])) + /* This indicates the end of the flags and thus enables the + following (URL) argument to start with -. */ + stillflags = FALSE; + else { + nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL; + + result = getparameter(flag, nextarg, &passarg, config); + if(!result && passarg) + i++; /* we're supposed to skip this */ + } + } + else { + bool used; + + /* Just add the URL please */ + result = getparameter((char *)"--url", argv[i], &used, config); + } + } + + if(result && result != PARAM_HELP_REQUESTED) { + const char *reason = param2text(result); + helpf(config->errors, "option %s: %s\n", orig_opt, reason); + } + + return result; +} diff --git a/src/tool_getparam.h b/src/tool_getparam.h index a86bfcec6..cf1496c50 100644 --- a/src/tool_getparam.h +++ b/src/tool_getparam.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2012, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2014, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -51,5 +51,8 @@ void parse_cert_parameter(const char *cert_parameter, char **passphrase); #endif +ParameterError parse_args(struct Configurable *config, int argc, + argv_item_t argv[]); + #endif /* HEADER_CURL_TOOL_GETPARAM_H */ diff --git a/src/tool_operate.c b/src/tool_operate.c index 76ffcd0da..af9e1de02 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -199,9 +199,7 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[]) CURL *curl = NULL; char *httpgetfields = NULL; - bool stillflags; int res = 0; - int i; unsigned long li; bool orig_noprogress; @@ -251,44 +249,15 @@ 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]; + /* Parse the command line arguments */ + res = parse_args(config, argc, argv); + if(res) { + if(res != PARAM_HELP_REQUESTED) + res = CURLE_FAILED_INIT; + else + res = CURLE_OK; - if(stillflags && - ('-' == argv[i][0])) { - char *nextarg; - bool passarg; - char *flag = argv[i]; - - if(curlx_strequal("--", argv[i])) - /* this indicates the end of the flags and thus enables the - following (URL) argument to start with -. */ - stillflags = FALSE; - else { - nextarg = (i < (argc-1)) ? argv[i+1] : NULL; - - res = getparameter(flag, nextarg, &passarg, config); - if(!res && passarg) /* we're supposed to skip this */ - i++; - } - } - else { - bool used; - /* just add the URL please */ - res = getparameter((char *)"--url", argv[i], &used, 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; - } + goto quit_curl; } if(config->userpwd && !config->xoauth2_bearer) {