From: Kefu Chai Date: Wed, 12 Feb 2020 12:39:54 +0000 (+0800) Subject: ceph_argparse: refactor env_to_vec() X-Git-Tag: v15.1.1~409^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=be7fedf8748970fc81dbca00ff43c79746d993af;p=ceph.git ceph_argparse: refactor env_to_vec() * no need to return dashdash for indicating if arguments after "--" is empty. the `arguments` itself would suffice. * return value by `return` not by passing input parameters Signed-off-by: Kefu Chai --- diff --git a/src/common/ceph_argparse.cc b/src/common/ceph_argparse.cc index cdb41846e7e..73272e554b4 100644 --- a/src/common/ceph_argparse.cc +++ b/src/common/ceph_argparse.cc @@ -64,23 +64,18 @@ void string_to_vec(std::vector& args, std::string argstr) } } -bool split_dashdash(const std::vector& args, - std::vector& options, - std::vector& arguments) { - bool dashdash = false; - for (std::vector::const_iterator i = args.begin(); - i != args.end(); - ++i) { - if (dashdash) { - arguments.push_back(*i); - } else { - if (strcmp(*i, "--") == 0) - dashdash = true; - else - options.push_back(*i); - } +std::pair, std::vector> +split_dashdash(const std::vector& args) { + auto dashdash = std::find_if(args.begin(), args.end(), + [](const char* arg) { + return strcmp(arg, "--") == 0; + }); + std::vector options{args.begin(), dashdash}; + if (dashdash != args.end()) { + ++dashdash; } - return dashdash; + std::vector arguments{dashdash, args.end()}; + return {std::move(options), std::move(arguments)}; } static std::mutex g_str_vec_lock; @@ -98,15 +93,7 @@ void env_to_vec(std::vector& args, const char *name) if (!name) name = "CEPH_ARGS"; - bool dashdash = false; - std::vector options; - std::vector arguments; - if (split_dashdash(args, options, arguments)) - dashdash = true; - - std::vector env_options; - std::vector env_arguments; - std::vector env; + auto [options, arguments] = split_dashdash(args); /* * We can only populate str_vec once. Other threads could hold pointers into @@ -123,17 +110,19 @@ void env_to_vec(std::vector& args, const char *name) } g_str_vec_lock.unlock(); - vector::iterator i; - for (i = g_str_vec.begin(); i != g_str_vec.end(); ++i) - env.push_back(i->c_str()); - if (split_dashdash(env, env_options, env_arguments)) - dashdash = true; + std::vector env; + for (const auto& s : g_str_vec) { + env.push_back(s.c_str()); + } + auto [env_options, env_arguments] = split_dashdash(env); args.clear(); args.insert(args.end(), options.begin(), options.end()); args.insert(args.end(), env_options.begin(), env_options.end()); - if (dashdash) - args.push_back("--"); + if (arguments.empty() && env_arguments.empty()) { + return; + } + args.push_back("--"); args.insert(args.end(), arguments.begin(), arguments.end()); args.insert(args.end(), env_arguments.begin(), env_arguments.end()); }