diff options
author | Colin Patrick McCabe <cmccabe@alumni.cmu.edu> | 2011-09-06 11:34:21 -0700 |
---|---|---|
committer | Colin Patrick McCabe <cmccabe@alumni.cmu.edu> | 2011-09-06 15:28:44 -0700 |
commit | 39538d73eb4b28f52349f45d08c3e94384eb9abe (patch) | |
tree | ce240fd1c00dd0ec4570621c7e527fd2b704aadf | |
parent | 1a1eab23034067247b6688cdaefdaa07c42e38e1 (diff) | |
download | ceph-39538d73eb4b28f52349f45d08c3e94384eb9abe.tar.gz |
monmaptool, osdmaptool: fix double-dash handling
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
-rw-r--r-- | src/monmaptool.cc | 22 | ||||
-rw-r--r-- | src/osdmaptool.cc | 11 | ||||
-rw-r--r-- | src/test/cli/monmaptool/create-print.t | 7 | ||||
-rw-r--r-- | src/test/cli/monmaptool/simple.t | 1 |
4 files changed, 27 insertions, 14 deletions
diff --git a/src/monmaptool.cc b/src/monmaptool.cc index c42df6f5f0a..de35ba3cc8e 100644 --- a/src/monmaptool.cc +++ b/src/monmaptool.cc @@ -54,9 +54,6 @@ int main(int argc, const char **argv) std::string val; for (std::vector<const char*>::iterator i = args.begin(); i != args.end(); ) { if (ceph_argparse_double_dash(args, i)) { - if (i != args.end()) { - fn = *i; - } break; } else if (ceph_argparse_flag(args, i, "-h", "--help", (char*)NULL)) { usage(); @@ -68,7 +65,8 @@ int main(int argc, const char **argv) clobber = true; } else if (ceph_argparse_flag(args, i, "--add", (char*)NULL)) { string name = *i; - if (++i == args.end()) + i = args.erase(i); + if (i == args.end()) usage(); entity_addr_t addr; if (!addr.parse(*i)) { @@ -79,19 +77,23 @@ int main(int argc, const char **argv) addr.set_port(CEPH_MON_PORT); add[name] = addr; modified = true; - ++i; + i = args.erase(i); } else if (ceph_argparse_witharg(args, i, &val, "--rm", (char*)NULL)) { rm.push_back(val); modified = true; - } else if (fn.empty()) { - fn = *i++; } else { - cerr << "invalid argument: '" << *i << "'" << std::endl; - usage(); + ++i; } } - if (fn.empty()) + if (args.size() < 1) { + cerr << me << ": must specify monmap filename" << std::endl; usage(); + } + else if (args.size() > 1) { + cerr << me << ": too many arguments" << std::endl; + usage(); + } + fn = args[0]; MonMap monmap(ceph_clock_now(g_ceph_context)); diff --git a/src/osdmaptool.cc b/src/osdmaptool.cc index f63ff45902c..ab06d12721d 100644 --- a/src/osdmaptool.cc +++ b/src/osdmaptool.cc @@ -117,16 +117,19 @@ int main(int argc, const char **argv) test_map_object = val; } else if (ceph_argparse_flag(args, i, "--test_crush", (char*)NULL)) { test_crush = true; - } else if (fn.empty()) { - fn = *i++; } else { - usage(); + ++i; } } - if (fn.empty()) { + if (args.size() < 1) { cerr << me << ": must specify osdmap filename" << std::endl; usage(); } + else if (args.size() > 1) { + cerr << me << ": too many arguments" << std::endl; + usage(); + } + fn = args[0]; OSDMap osdmap; bufferlist bl; diff --git a/src/test/cli/monmaptool/create-print.t b/src/test/cli/monmaptool/create-print.t index bede746b208..ef7104eeadf 100644 --- a/src/test/cli/monmaptool/create-print.t +++ b/src/test/cli/monmaptool/create-print.t @@ -9,3 +9,10 @@ fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re) last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) + + $ monmaptool --print -- mymonmap + monmaptool: monmap file mymonmap + epoch 1 + fsid [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (re) + last_changed \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) + created \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ (re) diff --git a/src/test/cli/monmaptool/simple.t b/src/test/cli/monmaptool/simple.t index 9acd15919d5..0eae4bbdc69 100644 --- a/src/test/cli/monmaptool/simple.t +++ b/src/test/cli/monmaptool/simple.t @@ -1,3 +1,4 @@ $ monmaptool + monmaptool: must specify monmap filename usage: [--print] [--create [--clobber]] [--add name 1.2.3.4:567] [--rm name] <mapfilename> [1] |