Storage state driver directories initialization needs to be modified
to become more generic.
Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1177733
---
src/storage/storage_driver.c | 52 ++++++++++++++++++++++++--------------------
1 file changed, 29 insertions(+), 23 deletions(-)
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index e088ffa..9bd93d2 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -154,54 +154,60 @@ storageStateInitialize(bool privileged,
virStateInhibitCallback callback ATTRIBUTE_UNUSED,
void *opaque ATTRIBUTE_UNUSED)
{
- char *base = NULL;
+ int ret = -1;
+ char *configdir = NULL;
+ char *rundir = NULL;
if (VIR_ALLOC(driver) < 0)
- return -1;
+ return ret;
if (virMutexInit(&driver->lock) < 0) {
VIR_FREE(driver);
- return -1;
+ return ret;
}
storageDriverLock();
if (privileged) {
- if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0)
+ if (VIR_STRDUP(driver->configDir,
+ SYSCONFDIR "/libvirt/storage") < 0 ||
+ VIR_STRDUP(driver->autostartDir,
+ SYSCONFDIR "/libvirt/storage/autostart") < 0 ||
+ VIR_STRDUP(driver->stateDir,
+ LOCALSTATEDIR "/run/libvirt/storage") < 0)
goto error;
} else {
- base = virGetUserConfigDirectory();
- if (!base)
+ configdir = virGetUserConfigDirectory();
+ rundir = virGetUserRuntimeDirectory();
+ if (!(configdir && rundir))
+ goto error;
+
+ if ((virAsprintf(&driver->configDir,
+ "%s/storage", configdir) < 0) ||
+ (virAsprintf(&driver->autostartDir,
+ "%s/storage", configdir) < 0) ||
+ (virAsprintf(&driver->stateDir,
+ "%s/storage/run", rundir) < 0))
goto error;
}
driver->privileged = privileged;
- /*
- * Configuration paths are either $USER_CONFIG_HOME/libvirt/storage/...
- * (session) or /etc/libvirt/storage/... (system).
- */
- if (virAsprintf(&driver->configDir,
- "%s/storage", base) == -1)
- goto error;
-
- if (virAsprintf(&driver->autostartDir,
- "%s/storage/autostart", base) == -1)
- goto error;
-
- VIR_FREE(base);
-
if (virStoragePoolLoadAllConfigs(&driver->pools,
driver->configDir,
driver->autostartDir) < 0)
goto error;
storageDriverUnlock();
- return 0;
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(configdir);
+ VIR_FREE(rundir);
+ return ret;
error:
- VIR_FREE(base);
storageDriverUnlock();
storageStateCleanup();
- return -1;
+ goto cleanup;
}
/**
--
1.9.3