mirror of https://github.com/xemu-project/xemu.git
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 free_option_parameters(QEMUOptionParameter *list);
|
||||||
void print_option_parameters(QEMUOptionParameter *list);
|
void print_option_parameters(QEMUOptionParameter *list);
|
||||||
void print_option_help(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;
|
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
|
* Prints all options of a list that have a value to stdout
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue