]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_argparse: add _daemon versions of argparse calls
authorDan Mick <dan.mick@inktank.com>
Mon, 8 Apr 2013 20:49:22 +0000 (13:49 -0700)
committerDan Mick <dmick@danceorelse.org>
Tue, 9 Apr 2013 08:27:10 +0000 (01:27 -0700)
mon needs to call argparse for a couple of -- options, and the
argparse_witharg routines were attempting to cerr/exit on missing
arguments.  This is appropriate for the CLI usage, but not the daemon
usage.  Add a 'cli' flag that can be set false for the daemon usage
(and cause the parsing routine to return false instead of exit).

The daemon's parsing code due for a rewrite soon.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
(cherry picked from commit c76bbc2e6df16d283cac3613628a44937e38bed8)

src/common/ceph_argparse.cc
src/common/ceph_argparse.h

index 646931acdc9ee54d4e8a48d2b48b37456328ee92..d4fa220efcc4d0dcb9fbd53b612491ed70042238 100644 (file)
@@ -241,7 +241,8 @@ bool ceph_argparse_binary_flag(std::vector<const char*> &args,
 }
 
 static bool va_ceph_argparse_witharg(std::vector<const char*> &args,
-       std::vector<const char*>::iterator &i, std::string *ret, va_list ap)
+       std::vector<const char*>::iterator &i, std::string *ret, bool cli,
+       va_list ap)
 {
   const char *first = *i;
   char tmp[strlen(first)+1];
@@ -267,8 +268,12 @@ static bool va_ceph_argparse_witharg(std::vector<const char*> &args,
       else if (first[strlen_a] == '\0') {
        // find second part (or not)
        if (i+1 == args.end()) {
-         cerr << "Option " << *i << " requires an argument." << std::endl;
-         _exit(1);
+         if (cli) {
+           cerr << "Option " << *i << " requires an argument." << std::endl;
+           _exit(1);
+         } else {
+           return false;
+         }
        }
        i = args.erase(i);
        *ret = *i;
@@ -285,11 +290,21 @@ bool ceph_argparse_witharg(std::vector<const char*> &args,
   bool r;
   va_list ap;
   va_start(ap, ret);
-  r = va_ceph_argparse_witharg(args, i, ret, ap);
+  r = va_ceph_argparse_witharg(args, i, ret, false, ap);
   va_end(ap);
   return r;
 }
 
+bool ceph_argparse_witharg_daemon(std::vector<const char*> &args,
+       std::vector<const char*>::iterator &i, std::string *ret, ...)
+{
+  bool r;
+  va_list ap;
+  va_start(ap, ret);
+  r = va_ceph_argparse_witharg(args, i, ret, false, ap);
+  va_end(ap);
+  return r;
+}
 bool ceph_argparse_withint(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, int *ret,
        std::ostream *oss, ...)
@@ -298,7 +313,30 @@ bool ceph_argparse_withint(std::vector<const char*> &args,
   va_list ap;
   std::string str;
   va_start(ap, oss);
-  r = va_ceph_argparse_witharg(args, i, &str, ap);
+  r = va_ceph_argparse_witharg(args, i, &str, true, ap);
+  va_end(ap);
+  if (!r) {
+    return false;
+  }
+
+  std::string err;
+  int myret = strict_strtol(str.c_str(), 10, &err);
+  *ret = myret;
+  if (!err.empty()) {
+    *oss << err;
+  }
+  return true;
+}
+
+bool ceph_argparse_withint_daemon(std::vector<const char*> &args,
+       std::vector<const char*>::iterator &i, int *ret,
+       std::ostream *oss, ...)
+{
+  bool r;
+  va_list ap;
+  std::string str;
+  va_start(ap, oss);
+  r = va_ceph_argparse_witharg(args, i, &str, false, ap);
   va_end(ap);
   if (!r) {
     return false;
@@ -321,7 +359,7 @@ bool ceph_argparse_withlonglong(std::vector<const char*> &args,
   va_list ap;
   std::string str;
   va_start(ap, oss);
-  r = va_ceph_argparse_witharg(args, i, &str, ap);
+  r = va_ceph_argparse_witharg(args, i, &str, false, ap);
   va_end(ap);
   if (!r) {
     return false;
@@ -344,7 +382,7 @@ bool ceph_argparse_withfloat(std::vector<const char*> &args,
   va_list ap;
   std::string str;
   va_start(ap, oss);
-  r = va_ceph_argparse_witharg(args, i, &str, ap);
+  r = va_ceph_argparse_witharg(args, i, &str, false, ap);
   va_end(ap);
   if (!r) {
     return false;
index fd9439c5627186579130c6a07d9191a408ed88a3..5d73b5ed3bb7873146d67d6e1c3b36609b5406f5 100644 (file)
@@ -56,6 +56,8 @@ bool ceph_argparse_flag(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, ...);
 bool ceph_argparse_witharg(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, std::string *ret, ...);
+bool ceph_argparse_witharg_daemon(std::vector<const char*> &args,
+       std::vector<const char*>::iterator &i, std::string *ret, ...);
 bool ceph_argparse_binary_flag(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, int *ret,
        std::ostream *oss, ...);
@@ -65,6 +67,9 @@ extern CephInitParameters ceph_argparse_early_args
 extern bool ceph_argparse_withint(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, int *ret,
        std::ostream *oss, ...);
+extern bool ceph_argparse_withint_daemon(std::vector<const char*> &args,
+       std::vector<const char*>::iterator &i, int *ret,
+       std::ostream *oss, ...);
 extern bool ceph_argparse_withfloat(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, float *ret,
        std::ostream *oss, ...);