static void
virStorageFileBackendFileDeinit(virStorageSourcePtr src)
{
- virStorageFileBackendFsPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendFsPrivPtr priv = drv->priv;
VIR_DEBUG("deinitializing FS storage file %p (%s:%s)", src,
virStorageTypeToString(virStorageSourceGetActualType(src)),
static int
virStorageFileBackendFileInit(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = src->drv;
virStorageFileBackendFsPrivPtr priv = NULL;
VIR_DEBUG("initializing FS storage file %p (%s:%s)[%u:%u]", src,
virStorageTypeToString(virStorageSourceGetActualType(src)),
src->path,
- (unsigned int)src->drv->uid, (unsigned int)src->drv->gid);
+ (unsigned int)drv->uid, (unsigned int)drv->gid);
priv = g_new0(virStorageFileBackendFsPriv, 1);
- src->drv->priv = priv;
+ drv->priv = priv;
return 0;
}
static int
virStorageFileBackendFileCreate(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = src->drv;
VIR_AUTOCLOSE fd = -1;
if ((fd = virFileOpenAs(src->path, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR,
- src->drv->uid, src->drv->gid, 0)) < 0) {
+ drv->uid, drv->gid, 0)) < 0) {
errno = -fd;
return -1;
}
size_t len,
char **buf)
{
+ virStorageDriverDataPtr drv = src->drv;
ssize_t ret = -1;
VIR_AUTOCLOSE fd = -1;
if ((fd = virFileOpenAs(src->path, O_RDONLY, 0,
- src->drv->uid, src->drv->gid, 0)) < 0) {
+ drv->uid, drv->gid, 0)) < 0) {
virReportSystemError(-fd, _("Failed to open file '%s'"),
src->path);
return -1;
static const char *
virStorageFileBackendFileGetUniqueIdentifier(virStorageSourcePtr src)
{
- virStorageFileBackendFsPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendFsPrivPtr priv = drv->priv;
if (!priv->canonpath) {
if (!(priv->canonpath = virFileCanonicalizePath(src->path))) {
virStorageFileBackendFileAccess(virStorageSourcePtr src,
int mode)
{
+ virStorageDriverDataPtr drv = src->drv;
+
return virFileAccessibleAs(src->path, mode,
- src->drv->uid, src->drv->gid);
+ drv->uid, drv->gid);
}
static void
virStorageFileBackendGlusterDeinit(virStorageSourcePtr src)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
VIR_DEBUG("deinitializing gluster storage file %p (gluster://%s:%u/%s%s)",
src, src->hosts->name, src->hosts->port, src->volume, src->path);
VIR_FREE(priv->canonpath);
VIR_FREE(priv);
- src->drv->priv = NULL;
+ drv->priv = NULL;
}
static int
static int
virStorageFileBackendGlusterInit(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = src->drv;
virStorageFileBackendGlusterPrivPtr priv = NULL;
size_t i;
VIR_DEBUG("initializing gluster storage file %p "
"(priv='%p' volume='%s' path='%s') as [%u:%u]",
src, priv, src->volume, src->path,
- (unsigned int)src->drv->uid, (unsigned int)src->drv->gid);
+ (unsigned int)drv->uid, (unsigned int)drv->gid);
if (!(priv->vol = glfs_new(src->volume))) {
virReportOOMError();
goto error;
}
- src->drv->priv = priv;
+ drv->priv = priv;
return 0;
static int
virStorageFileBackendGlusterCreate(virStorageSourcePtr src)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
glfs_fd_t *fd = NULL;
if (!(fd = glfs_creat(priv->vol, src->path,
static int
virStorageFileBackendGlusterUnlink(virStorageSourcePtr src)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
return glfs_unlink(priv->vol, src->path);
}
virStorageFileBackendGlusterStat(virStorageSourcePtr src,
struct stat *st)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
return glfs_stat(priv->vol, src->path, st);
}
size_t len,
char **buf)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
glfs_fd_t *fd = NULL;
ssize_t ret = -1;
char *s;
virStorageFileBackendGlusterAccess(virStorageSourcePtr src,
int mode)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
return glfs_access(priv->vol, src->path, mode);
}
static const char *
virStorageFileBackendGlusterGetUniqueIdentifier(virStorageSourcePtr src)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
g_autofree char *filePath = NULL;
if (priv->canonpath)
uid_t uid,
gid_t gid)
{
- virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
+ virStorageDriverDataPtr drv = src->drv;
+ virStorageFileBackendGlusterPrivPtr priv = drv->priv;
return glfs_chown(priv->vol, src->path, uid, gid);
}
}
if (src->drv) {
- *backend = src->drv->backend;
+ virStorageDriverDataPtr drv = src->drv;
+ *backend = drv->backend;
return 1;
}
void
virStorageFileDeinit(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = NULL;
+
if (!virStorageFileIsInitialized(src))
return;
- if (src->drv->backend &&
- src->drv->backend->backendDeinit)
- src->drv->backend->backendDeinit(src);
+ drv = src->drv;
+
+ if (drv->backend &&
+ drv->backend->backendDeinit)
+ drv->backend->backendDeinit(src);
VIR_FREE(src->drv);
}
uid_t uid, gid_t gid)
{
int actualType = virStorageSourceGetActualType(src);
- src->drv = g_new0(virStorageDriverData, 1);
+ virStorageDriverDataPtr drv = g_new0(virStorageDriverData, 1);
+
+ src->drv = drv;
if (uid == (uid_t) -1)
- src->drv->uid = geteuid();
+ drv->uid = geteuid();
else
- src->drv->uid = uid;
+ drv->uid = uid;
if (gid == (gid_t) -1)
- src->drv->gid = getegid();
+ drv->gid = getegid();
else
- src->drv->gid = gid;
+ drv->gid = gid;
if (virStorageFileBackendForType(actualType,
src->protocol,
true,
- &src->drv->backend) < 0)
+ &drv->backend) < 0)
goto error;
- if (src->drv->backend->backendInit &&
- src->drv->backend->backendInit(src) < 0)
+ if (drv->backend->backendInit &&
+ drv->backend->backendInit(src) < 0)
goto error;
return 0;
int
virStorageFileCreate(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = NULL;
int ret;
- if (!virStorageFileIsInitialized(src) ||
- !src->drv->backend->storageFileCreate) {
+ if (!virStorageFileIsInitialized(src)) {
+ errno = ENOSYS;
+ return -2;
+ }
+
+ drv = src->drv;
+
+ if (!drv->backend->storageFileCreate) {
errno = ENOSYS;
return -2;
}
- ret = src->drv->backend->storageFileCreate(src);
+ ret = drv->backend->storageFileCreate(src);
VIR_DEBUG("created storage file %p: ret=%d, errno=%d",
src, ret, errno);
int
virStorageFileUnlink(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = NULL;
int ret;
- if (!virStorageFileIsInitialized(src) ||
- !src->drv->backend->storageFileUnlink) {
+ if (!virStorageFileIsInitialized(src)) {
errno = ENOSYS;
return -2;
}
- ret = src->drv->backend->storageFileUnlink(src);
+ drv = src->drv;
+
+ if (!drv->backend->storageFileUnlink) {
+ errno = ENOSYS;
+ return -2;
+ }
+
+ ret = drv->backend->storageFileUnlink(src);
VIR_DEBUG("unlinked storage file %p: ret=%d, errno=%d",
src, ret, errno);
virStorageFileStat(virStorageSourcePtr src,
struct stat *st)
{
+ virStorageDriverDataPtr drv = NULL;
int ret;
- if (!virStorageFileIsInitialized(src) ||
- !src->drv->backend->storageFileStat) {
+ if (!virStorageFileIsInitialized(src)) {
+ errno = ENOSYS;
+ return -2;
+ }
+
+ drv = src->drv;
+
+ if (!drv->backend->storageFileStat) {
errno = ENOSYS;
return -2;
}
- ret = src->drv->backend->storageFileStat(src, st);
+ ret = drv->backend->storageFileStat(src, st);
VIR_DEBUG("stat of storage file %p: ret=%d, errno=%d",
src, ret, errno);
size_t len,
char **buf)
{
+ virStorageDriverDataPtr drv = NULL;
ssize_t ret;
if (!virStorageFileIsInitialized(src)) {
return -1;
}
- if (!src->drv->backend->storageFileRead)
+ drv = src->drv;
+
+ if (!drv->backend->storageFileRead)
return -2;
- ret = src->drv->backend->storageFileRead(src, offset, len, buf);
+ ret = drv->backend->storageFileRead(src, offset, len, buf);
VIR_DEBUG("read '%zd' bytes from storage '%p' starting at offset '%zu'",
ret, src, offset);
const char *
virStorageFileGetUniqueIdentifier(virStorageSourcePtr src)
{
+ virStorageDriverDataPtr drv = NULL;
+
if (!virStorageFileIsInitialized(src)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("storage file backend not initialized"));
return NULL;
}
- if (!src->drv->backend->storageFileGetUniqueIdentifier) {
+ drv = src->drv;
+
+ if (!drv->backend->storageFileGetUniqueIdentifier) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unique storage file identifier not implemented for "
"storage type %s (protocol: %s)'"),
return NULL;
}
- return src->drv->backend->storageFileGetUniqueIdentifier(src);
+ return drv->backend->storageFileGetUniqueIdentifier(src);
}
virStorageFileAccess(virStorageSourcePtr src,
int mode)
{
- if (!virStorageFileIsInitialized(src) ||
- !src->drv->backend->storageFileAccess) {
+ virStorageDriverDataPtr drv = NULL;
+
+ if (!virStorageFileIsInitialized(src)) {
errno = ENOSYS;
return -2;
}
- return src->drv->backend->storageFileAccess(src, mode);
+ drv = src->drv;
+
+ if (!drv->backend->storageFileAccess) {
+ errno = ENOSYS;
+ return -2;
+ }
+
+ return drv->backend->storageFileAccess(src, mode);
}
uid_t uid,
gid_t gid)
{
- if (!virStorageFileIsInitialized(src) ||
- !src->drv->backend->storageFileChown) {
+ virStorageDriverDataPtr drv = NULL;
+
+ if (!virStorageFileIsInitialized(src)) {
+ errno = ENOSYS;
+ return -2;
+ }
+
+ drv = src->drv;
+
+ if (!drv->backend->storageFileChown) {
errno = ENOSYS;
return -2;
}
VIR_DEBUG("chown of storage file %p to %u:%u",
src, (unsigned int)uid, (unsigned int)gid);
- return src->drv->backend->storageFileChown(src, uid, gid);
+ return drv->backend->storageFileChown(src, uid, gid);
}
virStorageSourcePtr parent)
{
if (src->drv) {
- unsigned int access_user = src->drv->uid;
- unsigned int access_group = src->drv->gid;
+ virStorageDriverDataPtr drv = src->drv;
+ unsigned int access_user = drv->uid;
+ unsigned int access_group = drv->gid;
if (src == parent) {
virReportSystemError(errcode,
};
-typedef struct _virStorageDriverData virStorageDriverData;
-typedef virStorageDriverData *virStorageDriverDataPtr;
-
typedef struct _virStorageSource virStorageSource;
typedef virStorageSource *virStorageSourcePtr;
virStorageSourcePtr backingStore;
/* metadata for storage driver access to remote and local volumes */
- virStorageDriverDataPtr drv;
+ void *drv;
/* metadata about storage image which need separate fields */
/* Relative name by which this image was opened from its parent, or NULL
typedef struct _virStorageFileBackend virStorageFileBackend;
typedef virStorageFileBackend *virStorageFileBackendPtr;
+typedef struct _virStorageDriverData virStorageDriverData;
+typedef virStorageDriverData *virStorageDriverDataPtr;
struct _virStorageDriverData {
virStorageFileBackendPtr backend;
void *priv;