From: Colin Patrick McCabe Date: Tue, 6 Sep 2011 18:34:21 +0000 (-0700) Subject: monmaptool, osdmaptool: fix double-dash handling X-Git-Tag: v0.35~96^2~8 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=39538d73eb4b28f52349f45d08c3e94384eb9abe;p=ceph.git monmaptool, osdmaptool: fix double-dash handling Signed-off-by: Colin McCabe --- diff --git a/src/monmaptool.cc b/src/monmaptool.cc index c42df6f5f0a82..de35ba3cc8ee6 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::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 f63ff45902ce7..ab06d12721dc2 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 bede746b208cf..ef7104eeadf7c 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 9acd15919d52c..0eae4bbdc696d 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] [1]