tool_operate: Moved command line argument parsing into separate function
authorSteve Holme <steve_holme@hotmail.com>
Sun, 2 Feb 2014 14:58:25 +0000 (14:58 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Mon, 3 Feb 2014 18:38:14 +0000 (18:38 +0000)
src/tool_getparam.c
src/tool_getparam.h
src/tool_operate.c

index dcb3584..2938f88 100644 (file)
@@ -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;
+}
index a86bfce..cf1496c 100644 (file)
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, 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
@@ -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 */
 
index 76ffcd0..af9e1de 100644 (file)
@@ -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];
-
-    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);
-    }
+  /* 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(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) {