mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
tools: arg_is_any_set and arg_is_only_set
Helpful functions to more easily detect conflicting set of options.
This commit is contained in:
parent
c0c1ada88e
commit
1931d1e58e
@ -68,6 +68,61 @@ unsigned arg_is_set(const struct cmd_context *cmd, int a)
|
||||
return arg_count(cmd, a) ? 1 : 0;
|
||||
}
|
||||
|
||||
int arg_is_any_set(const struct cmd_context *cmd, const char *err, ...)
|
||||
{
|
||||
int arg;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, err);
|
||||
while ((arg = va_arg(ap, int)) != -1 && !arg_count(cmd, arg))
|
||||
/* empty */;
|
||||
va_end(ap);
|
||||
|
||||
if (arg != -1) {
|
||||
log_error("%s %s.", arg_long_option_name(arg), err);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int arg_is_only_set(const struct cmd_context *cmd, const char *err, ...)
|
||||
{
|
||||
int i, arg;
|
||||
va_list ap;
|
||||
|
||||
for (i = 0; i < ARG_COUNT; ++i) {
|
||||
switch (i) {
|
||||
/* skip common options */
|
||||
case commandprofile_ARG:
|
||||
case config_ARG:
|
||||
case debug_ARG:
|
||||
case driverloaded_ARG:
|
||||
case help2_ARG:
|
||||
case help_ARG:
|
||||
case profile_ARG:
|
||||
case quiet_ARG:
|
||||
case verbose_ARG:
|
||||
case version_ARG:
|
||||
case yes_ARG:
|
||||
continue;
|
||||
}
|
||||
if (!arg_count(cmd, i))
|
||||
continue; /* unset */
|
||||
va_start(ap, err);
|
||||
while (((arg = va_arg(ap, int)) != -1) && (arg != i))
|
||||
/* empty */;
|
||||
va_end(ap);
|
||||
|
||||
if (arg != i) {
|
||||
log_error("Option %s %s.", arg_long_option_name(i), err);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned grouped_arg_is_set(const struct arg_values *av, int a)
|
||||
{
|
||||
return grouped_arg_count(av, a) ? 1 : 0;
|
||||
|
@ -144,6 +144,8 @@ int major_minor_valid(const struct cmd_context * cmd, const struct format_type *
|
||||
/* we use the enums to access the switches */
|
||||
unsigned arg_count(const struct cmd_context *cmd, int a);
|
||||
unsigned arg_is_set(const struct cmd_context *cmd, int a);
|
||||
int arg_is_any_set(const struct cmd_context *cmd, const char *err, ...);
|
||||
int arg_is_only_set(const struct cmd_context *cmd, const char *err, ...);
|
||||
const char *arg_long_option_name(int a);
|
||||
const char *arg_value(struct cmd_context *cmd, int a);
|
||||
const char *arg_str_value(struct cmd_context *cmd, int a, const char *def);
|
||||
|
Loading…
Reference in New Issue
Block a user