]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge remote-tracking branch 'origin/wip-2862'
authorJosh Durgin <jdurgin@redhat.com>
Wed, 8 Apr 2015 20:51:31 +0000 (13:51 -0700)
committerJosh Durgin <jdurgin@redhat.com>
Wed, 8 Apr 2015 20:55:13 +0000 (13:55 -0700)
Reviewed-by: Josh Durgin <jdurgin@redhat.com>
Conflicts:
src/common/ceph_argparse.cc
src/rbd.cc

1  2 
src/common/ceph_argparse.cc
src/rbd.cc

index 791ece793203f0ec19fb09b79bd82cda79be4d5b,91ec13deee59333e2736dd5eb28f57ddf7de8b9c..400edee17d5772e37a42d66b14c65632b21d31ac
@@@ -339,25 -375,36 +377,38 @@@ static int va_ceph_argparse_witharg(std
  template<class T>
  bool ceph_argparse_witharg(std::vector<const char*> &args,
        std::vector<const char*>::iterator &i, T *ret,
 -      std::ostream *oss, ...)
 +      std::ostream &oss, ...)
  {
 -  bool r;
 +  int r;
    va_list ap;
+   bool is_option = false;
+   bool is_numeric = true;
    std::string str;
    va_start(ap, oss);
 -  r = va_ceph_argparse_witharg(args, i, &str, ap);
 +  r = va_ceph_argparse_witharg(args, i, &str, oss, ap);
    va_end(ap);
 -  if (!r) {
 +  if (r == 0) {
      return false;
++  } else if (r < 0) {
++    return true;
    }
  
-   if (r == 1) {
-     std::string err;
-     T myret = strict_str_convert(str.c_str(), &err);
-     *ret = myret;
-     if (!err.empty()) {
-       oss << err;
+   ceph_arg_value_type(str.c_str(), &is_option, &is_numeric);
+   if ((is_option == true) || (is_numeric == false)) {
+     *ret = EXIT_FAILURE;
+     if (is_option == true) {
 -      *oss << "Missing option value";
++      oss << "Missing option value";
+     } else {
 -      *oss << "The option value '" << str << "' is invalid";
++      oss << "The option value '" << str << "' is invalid";
      }
 -    *oss << err;
+     return true;
+   }
+   std::string err;
+   T myret = strict_str_convert(str.c_str(), &err);
+   *ret = myret;
+   if (!err.empty()) {
++    oss << err;
    }
    return true;
  }
diff --cc src/rbd.cc
index 2ecae20c003bd37a43e7438f703a6403d1d00032,37be146d67a5df23e44a86c477cf108fc52d116b..5b83ef924d158c58fd546712e99aeee9a04127e4
@@@ -2799,7 -2799,11 +2799,11 @@@ int main(int argc, const char **argv
        cerr << "rbd: " << err.str() << std::endl;
        return EXIT_FAILURE;
        }
 -    } else if (ceph_argparse_witharg(args, i, &bench_io_size, &err, "--io-size", (char*)NULL)) {
+       if ((order <= 0) || (order < 12) || (order > 25)) {
+       cerr << "rbd: order must be between 12 (4 KB) and 25 (32 MB)" << std::endl;
+       return EXIT_FAILURE;
+       }
 +    } else if (ceph_argparse_witharg(args, i, &bench_io_size, err, "--io-size", (char*)NULL)) {
        if (!err.str().empty()) {
        cerr << "rbd: " << err.str() << std::endl;
        return EXIT_FAILURE;