virtlockd: convert to typesafe virConf accessors

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2016-07-08 11:45:37 +01:00
parent f5da0d1805
commit 2666b2905f
3 changed files with 12 additions and 88 deletions

View File

@ -82,7 +82,6 @@ src/libxl/libxl_domain.c
src/libxl/libxl_driver.c src/libxl/libxl_driver.c
src/libxl/libxl_migration.c src/libxl/libxl_migration.c
src/locking/lock_daemon.c src/locking/lock_daemon.c
src/locking/lock_daemon_config.c
src/locking/lock_daemon_dispatch.c src/locking/lock_daemon_dispatch.c
src/locking/lock_driver_lockd.c src/locking/lock_driver_lockd.c
src/locking/lock_driver_sanlock.c src/locking/lock_driver_sanlock.c

View File

@ -37,62 +37,6 @@
VIR_LOG_INIT("locking.lock_daemon_config"); VIR_LOG_INIT("locking.lock_daemon_config");
/* A helper function used by each of the following macros. */
static int
checkType(virConfValuePtr p, const char *filename,
const char *key, virConfType required_type)
{
if (p->type != required_type) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("remoteReadConfigFile: %s: %s: invalid type:"
" got %s; expected %s"), filename, key,
virConfTypeToString(p->type),
virConfTypeToString(required_type));
return -1;
}
return 0;
}
/* If there is no config data for the key, #var_name, then do nothing.
If there is valid data of type VIR_CONF_STRING, and VIR_STRDUP succeeds,
store the result in var_name. Otherwise, (i.e. invalid type, or VIR_STRDUP
failure), give a diagnostic and "goto" the cleanup-and-fail label. */
#define GET_CONF_STR(conf, filename, var_name) \
do { \
virConfValuePtr p = virConfGetValue(conf, #var_name); \
if (p) { \
if (checkType(p, filename, #var_name, VIR_CONF_STRING) < 0) \
goto error; \
VIR_FREE(data->var_name); \
if (VIR_STRDUP(data->var_name, p->str) < 0) \
goto error; \
} \
} while (0)
/* Like GET_CONF_STR, but for signed integer values. */
#define GET_CONF_INT(conf, filename, var_name) \
do { \
virConfValuePtr p = virConfGetValue(conf, #var_name); \
if (p) { \
if (p->type != VIR_CONF_ULONG && \
checkType(p, filename, #var_name, VIR_CONF_LONG) < 0) \
goto error; \
data->var_name = p->l; \
} \
} while (0)
/* Like GET_CONF_STR, but for unsigned integer values. */
#define GET_CONF_UINT(conf, filename, var_name) \
do { \
virConfValuePtr p = virConfGetValue(conf, #var_name); \
if (p) { \
if (checkType(p, filename, #var_name, VIR_CONF_ULONG) < 0) \
goto error; \
data->var_name = p->l; \
} \
} while (0)
int int
virLockDaemonConfigFilePath(bool privileged, char **configfile) virLockDaemonConfigFilePath(bool privileged, char **configfile)
{ {
@ -146,18 +90,18 @@ virLockDaemonConfigFree(virLockDaemonConfigPtr data)
static int static int
virLockDaemonConfigLoadOptions(virLockDaemonConfigPtr data, virLockDaemonConfigLoadOptions(virLockDaemonConfigPtr data,
const char *filename,
virConfPtr conf) virConfPtr conf)
{ {
GET_CONF_UINT(conf, filename, log_level); if (virConfGetValueUInt(conf, "log_level", &data->log_level) < 0)
GET_CONF_STR(conf, filename, log_filters); return -1;
GET_CONF_STR(conf, filename, log_outputs); if (virConfGetValueString(conf, "log_filters", &data->log_filters) < 0)
GET_CONF_UINT(conf, filename, max_clients); return -1;
if (virConfGetValueString(conf, "log_outputs", &data->log_filters) < 0)
return -1;
if (virConfGetValueUInt(conf, "max_clients", &data->max_clients) < 0)
return -1;
return 0; return 0;
error:
return -1;
} }
@ -181,23 +125,7 @@ virLockDaemonConfigLoadFile(virLockDaemonConfigPtr data,
if (!conf) if (!conf)
return -1; return -1;
ret = virLockDaemonConfigLoadOptions(data, filename, conf); ret = virLockDaemonConfigLoadOptions(data, conf);
virConfFree(conf);
return ret;
}
int virLockDaemonConfigLoadData(virLockDaemonConfigPtr data,
const char *filename,
const char *filedata)
{
virConfPtr conf;
int ret;
conf = virConfReadMem(filedata, strlen(filedata), 0);
if (!conf)
return -1;
ret = virLockDaemonConfigLoadOptions(data, filename, conf);
virConfFree(conf); virConfFree(conf);
return ret; return ret;
} }

View File

@ -30,10 +30,10 @@ typedef struct _virLockDaemonConfig virLockDaemonConfig;
typedef virLockDaemonConfig *virLockDaemonConfigPtr; typedef virLockDaemonConfig *virLockDaemonConfigPtr;
struct _virLockDaemonConfig { struct _virLockDaemonConfig {
int log_level; unsigned int log_level;
char *log_filters; char *log_filters;
char *log_outputs; char *log_outputs;
int max_clients; unsigned int max_clients;
}; };
@ -43,8 +43,5 @@ void virLockDaemonConfigFree(virLockDaemonConfigPtr data);
int virLockDaemonConfigLoadFile(virLockDaemonConfigPtr data, int virLockDaemonConfigLoadFile(virLockDaemonConfigPtr data,
const char *filename, const char *filename,
bool allow_missing); bool allow_missing);
int virLockDaemonConfigLoadData(virLockDaemonConfigPtr data,
const char *filename,
const char *filedata);
#endif /* __LIBVIRTD_CONFIG_H__ */ #endif /* __LIBVIRTD_CONFIG_H__ */