mirror of
https://github.com/ceph/ceph
synced 2025-04-01 23:02:17 +00:00
ceph_argparse: add _daemon versions of argparse calls
mon needs to call argparse for a couple of -- options, and the argparse_witharg routines were attempting to cerr/exit on missing arguments. This is appropriate for the CLI usage, but not the daemon usage. Add a 'cli' flag that can be set false for the daemon usage (and cause the parsing routine to return false instead of exit). The daemon's parsing code due for a rewrite soon. Signed-off-by: Dan Mick <dan.mick@inktank.com> Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
This commit is contained in:
parent
d7b7acefc8
commit
c76bbc2e6d
src/common
@ -252,7 +252,8 @@ bool ceph_argparse_binary_flag(std::vector<const char*> &args,
|
||||
}
|
||||
|
||||
static bool va_ceph_argparse_witharg(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, std::string *ret, va_list ap)
|
||||
std::vector<const char*>::iterator &i, std::string *ret, bool cli,
|
||||
va_list ap)
|
||||
{
|
||||
const char *first = *i;
|
||||
char tmp[strlen(first)+1];
|
||||
@ -278,8 +279,12 @@ static bool va_ceph_argparse_witharg(std::vector<const char*> &args,
|
||||
else if (first[strlen_a] == '\0') {
|
||||
// find second part (or not)
|
||||
if (i+1 == args.end()) {
|
||||
cerr << "Option " << *i << " requires an argument." << std::endl;
|
||||
_exit(1);
|
||||
if (cli) {
|
||||
cerr << "Option " << *i << " requires an argument." << std::endl;
|
||||
_exit(1);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
i = args.erase(i);
|
||||
*ret = *i;
|
||||
@ -296,11 +301,21 @@ bool ceph_argparse_witharg(std::vector<const char*> &args,
|
||||
bool r;
|
||||
va_list ap;
|
||||
va_start(ap, ret);
|
||||
r = va_ceph_argparse_witharg(args, i, ret, ap);
|
||||
r = va_ceph_argparse_witharg(args, i, ret, false, ap);
|
||||
va_end(ap);
|
||||
return r;
|
||||
}
|
||||
|
||||
bool ceph_argparse_witharg_daemon(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, std::string *ret, ...)
|
||||
{
|
||||
bool r;
|
||||
va_list ap;
|
||||
va_start(ap, ret);
|
||||
r = va_ceph_argparse_witharg(args, i, ret, false, ap);
|
||||
va_end(ap);
|
||||
return r;
|
||||
}
|
||||
bool ceph_argparse_withint(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, int *ret,
|
||||
std::ostream *oss, ...)
|
||||
@ -309,7 +324,30 @@ bool ceph_argparse_withint(std::vector<const char*> &args,
|
||||
va_list ap;
|
||||
std::string str;
|
||||
va_start(ap, oss);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, ap);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, true, ap);
|
||||
va_end(ap);
|
||||
if (!r) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string err;
|
||||
int myret = strict_strtol(str.c_str(), 10, &err);
|
||||
*ret = myret;
|
||||
if (!err.empty()) {
|
||||
*oss << err;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ceph_argparse_withint_daemon(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, int *ret,
|
||||
std::ostream *oss, ...)
|
||||
{
|
||||
bool r;
|
||||
va_list ap;
|
||||
std::string str;
|
||||
va_start(ap, oss);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, false, ap);
|
||||
va_end(ap);
|
||||
if (!r) {
|
||||
return false;
|
||||
@ -332,7 +370,7 @@ bool ceph_argparse_withlonglong(std::vector<const char*> &args,
|
||||
va_list ap;
|
||||
std::string str;
|
||||
va_start(ap, oss);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, ap);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, false, ap);
|
||||
va_end(ap);
|
||||
if (!r) {
|
||||
return false;
|
||||
@ -355,7 +393,7 @@ bool ceph_argparse_withfloat(std::vector<const char*> &args,
|
||||
va_list ap;
|
||||
std::string str;
|
||||
va_start(ap, oss);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, ap);
|
||||
r = va_ceph_argparse_witharg(args, i, &str, false, ap);
|
||||
va_end(ap);
|
||||
if (!r) {
|
||||
return false;
|
||||
|
@ -57,6 +57,8 @@ bool ceph_argparse_flag(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, ...);
|
||||
bool ceph_argparse_witharg(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, std::string *ret, ...);
|
||||
bool ceph_argparse_witharg_daemon(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, std::string *ret, ...);
|
||||
bool ceph_argparse_binary_flag(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, int *ret,
|
||||
std::ostream *oss, ...);
|
||||
@ -66,6 +68,9 @@ extern CephInitParameters ceph_argparse_early_args
|
||||
extern bool ceph_argparse_withint(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, int *ret,
|
||||
std::ostream *oss, ...);
|
||||
extern bool ceph_argparse_withint_daemon(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, int *ret,
|
||||
std::ostream *oss, ...);
|
||||
extern bool ceph_argparse_withfloat(std::vector<const char*> &args,
|
||||
std::vector<const char*>::iterator &i, float *ret,
|
||||
std::ostream *oss, ...);
|
||||
|
Loading…
Reference in New Issue
Block a user