From: Josh Durgin Date: Wed, 8 Apr 2015 20:51:31 +0000 (-0700) Subject: Merge remote-tracking branch 'origin/wip-2862' X-Git-Tag: v9.0.0~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=94ceeb94bab4d942c50ab3f70c1df389acd31ded;p=ceph.git Merge remote-tracking branch 'origin/wip-2862' Reviewed-by: Josh Durgin Conflicts: src/common/ceph_argparse.cc src/rbd.cc --- 94ceeb94bab4d942c50ab3f70c1df389acd31ded diff --cc src/common/ceph_argparse.cc index 791ece793203,91ec13deee59..400edee17d57 --- a/src/common/ceph_argparse.cc +++ b/src/common/ceph_argparse.cc @@@ -339,25 -375,36 +377,38 @@@ static int va_ceph_argparse_witharg(std template bool ceph_argparse_witharg(std::vector &args, std::vector::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"; } + return true; + } + + std::string err; + T myret = strict_str_convert(str.c_str(), &err); + *ret = myret; + if (!err.empty()) { - *oss << err; ++ oss << err; } return true; } diff --cc src/rbd.cc index 2ecae20c003b,37be146d67a5..5b83ef924d15 --- a/src/rbd.cc +++ b/src/rbd.cc @@@ -2799,7 -2799,11 +2799,11 @@@ int main(int argc, const char **argv cerr << "rbd: " << err.str() << std::endl; return EXIT_FAILURE; } + 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)) { + } 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;