Commit c35d05aa authored by Steve Holme's avatar Steve Holme
Browse files

tool_operate: Moved command line argument parsing into separate function

parent 8034b08e
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -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;
}
+4 −1
Original line number Diff line number Diff line
@@ -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 */
+8 −39
Original line number Diff line number Diff line
@@ -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,45 +249,16 @@ 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) {
      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;
    if(res != PARAM_HELP_REQUESTED)
      res = CURLE_FAILED_INIT;
    else
      res = CURLE_OK;

    goto quit_curl;
  }
  }

  if(config->userpwd && !config->xoauth2_bearer) {
    res = checkpasswd("host", &config->userpwd);