From 8863c03d7d38a2ad133aa055f0ed7a262b9088c5 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Sat, 5 Oct 2019 14:13:46 -0400 Subject: [PATCH] storagefile: Split out virStorageSourceNewFromChild Future patches will use this for external data file handling Reviewed-by: Daniel Henrique Barboza Reviewed-by: Michal Privoznik Signed-off-by: Cole Robinson --- src/util/virstoragefile.c | 47 ++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 26b7fe1187..9a99dd6d77 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -3717,38 +3717,38 @@ virStorageSourceNewFromBackingAbsolute(const char *path, /** - * virStorageSourceNewFromBacking: + * virStorageSourceNewFromChild: * @parent: storage source parent - * @backing: returned backing store definition + * @child: returned child/backing store definition + * @parentRaw: raw child string (backingStoreRaw) * * Creates a storage source which describes the backing image of @parent and - * fills it into @backing depending on the 'backingStoreRaw' property of @parent + * fills it into @backing depending on the passed parentRaw (backingStoreRaw) * and other data. Note that for local storage this function accesses the file - * to update the actual type of the backing store. + * to update the actual type of the child store. * - * Returns 0 on success, 1 if we could parse all location data but the backinig + * Returns 0 on success, 1 if we could parse all location data but the child * store specification contained other data unrepresentable by libvirt (e.g. * inline authentication). * In both cases @src is filled. On error -1 is returned @src is NULL and an * error is reported. */ -int -virStorageSourceNewFromBacking(virStorageSourcePtr parent, - virStorageSourcePtr *backing) +static int +virStorageSourceNewFromChild(virStorageSourcePtr parent, + const char *parentRaw, + virStorageSourcePtr *child) { struct stat st; VIR_AUTOUNREF(virStorageSourcePtr) def = NULL; int rc = 0; - *backing = NULL; + *child = NULL; - if (virStorageIsRelative(parent->backingStoreRaw)) { - if (!(def = virStorageSourceNewFromBackingRelative(parent, - parent->backingStoreRaw))) + if (virStorageIsRelative(parentRaw)) { + if (!(def = virStorageSourceNewFromBackingRelative(parent, parentRaw))) return -1; } else { - if ((rc = virStorageSourceNewFromBackingAbsolute(parent->backingStoreRaw, - &def)) < 0) + if ((rc = virStorageSourceNewFromBackingAbsolute(parentRaw, &def)) < 0) return -1; } @@ -3768,10 +3768,25 @@ virStorageSourceNewFromBacking(virStorageSourcePtr parent, if (virStorageSourceInitChainElement(def, parent, true) < 0) return -1; - def->readonly = true; def->detected = true; - VIR_STEAL_PTR(*backing, def); + VIR_STEAL_PTR(*child, def); + return rc; +} + + +int +virStorageSourceNewFromBacking(virStorageSourcePtr parent, + virStorageSourcePtr *backing) +{ + int rc; + + if ((rc = virStorageSourceNewFromChild(parent, + parent->backingStoreRaw, + backing)) < 0) + return rc; + + (*backing)->readonly = true; return rc; }