qemu-option: has_help_option() and is_valid_option_list()
has_help_option() checks if any help option ('help' or '?') occurs anywhere in an option string, so that things like 'cluster_size=4k,help' are recognised. is_valid_option_list() ensures that the option list doesn't have options with leading commas or trailing unescaped commas. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
5b7aa9b56d
commit
7cc07ab8da
@ -79,6 +79,8 @@ void parse_option_size(const char *name, const char *value,
|
||||
void free_option_parameters(QEMUOptionParameter *list);
|
||||
void print_option_parameters(QEMUOptionParameter *list);
|
||||
void print_option_help(QEMUOptionParameter *list);
|
||||
bool has_help_option(const char *param);
|
||||
bool is_valid_option_list(const char *param);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
@ -450,6 +450,55 @@ fail:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool has_help_option(const char *param)
|
||||
{
|
||||
size_t buflen = strlen(param) + 1;
|
||||
char *buf = g_malloc0(buflen);
|
||||
const char *p = param;
|
||||
bool result = false;
|
||||
|
||||
while (*p) {
|
||||
p = get_opt_value(buf, buflen, p);
|
||||
if (*p) {
|
||||
p++;
|
||||
}
|
||||
|
||||
if (is_help_option(buf)) {
|
||||
result = true;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
free(buf);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool is_valid_option_list(const char *param)
|
||||
{
|
||||
size_t buflen = strlen(param) + 1;
|
||||
char *buf = g_malloc0(buflen);
|
||||
const char *p = param;
|
||||
bool result = true;
|
||||
|
||||
while (*p) {
|
||||
p = get_opt_value(buf, buflen, p);
|
||||
if (*p && !*++p) {
|
||||
result = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!*buf || *buf == ',') {
|
||||
result = false;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
free(buf);
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Prints all options of a list that have a value to stdout
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user