mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-26 20:03:54 -06:00
qapi: New parse_qapi_name()
Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <1488317230-26248-19-git-send-email-armbru@redhat.com>
This commit is contained in:
parent
6c873d1149
commit
069b64e3fe
3 changed files with 83 additions and 0 deletions
|
@ -33,3 +33,50 @@ int qapi_enum_parse(const char * const lookup[], const char *buf,
|
|||
error_setg(errp, "invalid parameter value: %s", buf);
|
||||
return def;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse a valid QAPI name from @str.
|
||||
* A valid name consists of letters, digits, hyphen and underscore.
|
||||
* It may be prefixed by __RFQDN_ (downstream extension), where RFQDN
|
||||
* may contain only letters, digits, hyphen and period.
|
||||
* The special exception for enumeration names is not implemented.
|
||||
* See docs/qapi-code-gen.txt for more on QAPI naming rules.
|
||||
* Keep this consistent with scripts/qapi.py!
|
||||
* If @complete, the parse fails unless it consumes @str completely.
|
||||
* Return its length on success, -1 on failure.
|
||||
*/
|
||||
int parse_qapi_name(const char *str, bool complete)
|
||||
{
|
||||
const char *p = str;
|
||||
|
||||
if (*p == '_') { /* Downstream __RFQDN_ */
|
||||
p++;
|
||||
if (*p != '_') {
|
||||
return -1;
|
||||
}
|
||||
while (*++p) {
|
||||
if (!qemu_isalnum(*p) && *p != '-' && *p != '.') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (*p != '_') {
|
||||
return -1;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
if (!qemu_isalpha(*p)) {
|
||||
return -1;
|
||||
}
|
||||
while (*++p) {
|
||||
if (!qemu_isalnum(*p) && *p != '-' && *p != '_') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (complete && *p) {
|
||||
return -1;
|
||||
}
|
||||
return p - str;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue