mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
uri: convert to typesafe virConf accessors
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
571bced207
commit
b8b31acdf6
@ -320,55 +320,40 @@ void virURIFree(virURIPtr uri)
|
|||||||
#define URI_ALIAS_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
|
#define URI_ALIAS_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virURIFindAliasMatch(virConfValuePtr value, const char *alias,
|
virURIFindAliasMatch(char *const*aliases, const char *alias,
|
||||||
char **uri)
|
char **uri)
|
||||||
{
|
{
|
||||||
virConfValuePtr entry;
|
|
||||||
size_t alias_len;
|
size_t alias_len;
|
||||||
|
|
||||||
if (value->type != VIR_CONF_LIST) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
||||||
_("Expected a list for 'uri_aliases' config parameter"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry = value->list;
|
|
||||||
alias_len = strlen(alias);
|
alias_len = strlen(alias);
|
||||||
while (entry) {
|
while (*aliases) {
|
||||||
char *offset;
|
char *offset;
|
||||||
size_t safe;
|
size_t safe;
|
||||||
|
|
||||||
if (entry->type != VIR_CONF_STRING) {
|
if (!(offset = strchr(*aliases, '='))) {
|
||||||
virReportError(VIR_ERR_CONF_SYNTAX, "%s",
|
|
||||||
_("Expected a string for 'uri_aliases' config "
|
|
||||||
"parameter list entry"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(offset = strchr(entry->str, '='))) {
|
|
||||||
virReportError(VIR_ERR_CONF_SYNTAX,
|
virReportError(VIR_ERR_CONF_SYNTAX,
|
||||||
_("Malformed 'uri_aliases' config entry '%s', "
|
_("Malformed 'uri_aliases' config entry '%s', "
|
||||||
"expected 'alias=uri://host/path'"), entry->str);
|
"expected 'alias=uri://host/path'"), *aliases);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
safe = strspn(entry->str, URI_ALIAS_CHARS);
|
safe = strspn(*aliases, URI_ALIAS_CHARS);
|
||||||
if (safe < (offset - entry->str)) {
|
if (safe < (offset - *aliases)) {
|
||||||
virReportError(VIR_ERR_CONF_SYNTAX,
|
virReportError(VIR_ERR_CONF_SYNTAX,
|
||||||
_("Malformed 'uri_aliases' config entry '%s', "
|
_("Malformed 'uri_aliases' config entry '%s', "
|
||||||
"aliases may only contain 'a-Z, 0-9, _, -'"),
|
"aliases may only contain 'a-Z, 0-9, _, -'"),
|
||||||
entry->str);
|
*aliases);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alias_len == (offset - entry->str) &&
|
if (alias_len == (offset - *aliases) &&
|
||||||
STREQLEN(entry->str, alias, alias_len)) {
|
STREQLEN(*aliases, alias, alias_len)) {
|
||||||
VIR_DEBUG("Resolved alias '%s' to '%s'",
|
VIR_DEBUG("Resolved alias '%s' to '%s'",
|
||||||
alias, offset+1);
|
alias, offset+1);
|
||||||
return VIR_STRDUP(*uri, offset+1);
|
return VIR_STRDUP(*uri, offset+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = entry->next;
|
aliases++;
|
||||||
}
|
}
|
||||||
|
|
||||||
VIR_DEBUG("No alias found for '%s', continuing...",
|
VIR_DEBUG("No alias found for '%s', continuing...",
|
||||||
@ -392,14 +377,19 @@ int
|
|||||||
virURIResolveAlias(virConfPtr conf, const char *alias, char **uri)
|
virURIResolveAlias(virConfPtr conf, const char *alias, char **uri)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
virConfValuePtr value = NULL;
|
char **aliases = NULL;
|
||||||
|
|
||||||
*uri = NULL;
|
*uri = NULL;
|
||||||
|
|
||||||
if ((value = virConfGetValue(conf, "uri_aliases")))
|
if (virConfGetValueStringList(conf, "uri_aliases", false, &aliases) < 0)
|
||||||
ret = virURIFindAliasMatch(value, alias, uri);
|
return -1;
|
||||||
else
|
|
||||||
|
if (aliases && *aliases) {
|
||||||
|
ret = virURIFindAliasMatch(aliases, alias, uri);
|
||||||
|
virStringFreeList(aliases);
|
||||||
|
} else {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user