mirror of
https://github.com/ceph/ceph
synced 2025-04-11 04:02:04 +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
@ -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,
|
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;
|
const char *first = *i;
|
||||||
char tmp[strlen(first)+1];
|
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') {
|
else if (first[strlen_a] == '\0') {
|
||||||
// find second part (or not)
|
// find second part (or not)
|
||||||
if (i+1 == args.end()) {
|
if (i+1 == args.end()) {
|
||||||
|
if (cli) {
|
||||||
cerr << "Option " << *i << " requires an argument." << std::endl;
|
cerr << "Option " << *i << " requires an argument." << std::endl;
|
||||||
_exit(1);
|
_exit(1);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
i = args.erase(i);
|
i = args.erase(i);
|
||||||
*ret = *i;
|
*ret = *i;
|
||||||
@ -296,11 +301,21 @@ bool ceph_argparse_witharg(std::vector<const char*> &args,
|
|||||||
bool r;
|
bool r;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, ret);
|
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);
|
va_end(ap);
|
||||||
return r;
|
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,
|
bool ceph_argparse_withint(std::vector<const char*> &args,
|
||||||
std::vector<const char*>::iterator &i, int *ret,
|
std::vector<const char*>::iterator &i, int *ret,
|
||||||
std::ostream *oss, ...)
|
std::ostream *oss, ...)
|
||||||
@ -309,7 +324,30 @@ bool ceph_argparse_withint(std::vector<const char*> &args,
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
std::string str;
|
std::string str;
|
||||||
va_start(ap, oss);
|
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);
|
va_end(ap);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
return false;
|
return false;
|
||||||
@ -332,7 +370,7 @@ bool ceph_argparse_withlonglong(std::vector<const char*> &args,
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
std::string str;
|
std::string str;
|
||||||
va_start(ap, oss);
|
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);
|
va_end(ap);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
return false;
|
return false;
|
||||||
@ -355,7 +393,7 @@ bool ceph_argparse_withfloat(std::vector<const char*> &args,
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
std::string str;
|
std::string str;
|
||||||
va_start(ap, oss);
|
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);
|
va_end(ap);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -57,6 +57,8 @@ bool ceph_argparse_flag(std::vector<const char*> &args,
|
|||||||
std::vector<const char*>::iterator &i, ...);
|
std::vector<const char*>::iterator &i, ...);
|
||||||
bool ceph_argparse_witharg(std::vector<const char*> &args,
|
bool ceph_argparse_witharg(std::vector<const char*> &args,
|
||||||
std::vector<const char*>::iterator &i, std::string *ret, ...);
|
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,
|
bool ceph_argparse_binary_flag(std::vector<const char*> &args,
|
||||||
std::vector<const char*>::iterator &i, int *ret,
|
std::vector<const char*>::iterator &i, int *ret,
|
||||||
std::ostream *oss, ...);
|
std::ostream *oss, ...);
|
||||||
@ -66,6 +68,9 @@ extern CephInitParameters ceph_argparse_early_args
|
|||||||
extern bool ceph_argparse_withint(std::vector<const char*> &args,
|
extern bool ceph_argparse_withint(std::vector<const char*> &args,
|
||||||
std::vector<const char*>::iterator &i, int *ret,
|
std::vector<const char*>::iterator &i, int *ret,
|
||||||
std::ostream *oss, ...);
|
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,
|
extern bool ceph_argparse_withfloat(std::vector<const char*> &args,
|
||||||
std::vector<const char*>::iterator &i, float *ret,
|
std::vector<const char*>::iterator &i, float *ret,
|
||||||
std::ostream *oss, ...);
|
std::ostream *oss, ...);
|
||||||
|
Loading…
Reference in New Issue
Block a user