mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-27 18:03:50 +03:00
utils: storage: Add helper for checking if storage source is the same
To allow checking whether a storage source points to the same location add a helper which checks the relevant fields. This will allow replacing a similar check done by formatting the command line arguments for qemu-like syntax. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
dbf990fd31
commit
3dfcd17c9d
@ -2856,6 +2856,7 @@ virStorageSourceIsBlockLocal;
|
||||
virStorageSourceIsEmpty;
|
||||
virStorageSourceIsLocalStorage;
|
||||
virStorageSourceIsRelative;
|
||||
virStorageSourceIsSameLocation;
|
||||
virStorageSourceNetworkAssignDefaultPorts;
|
||||
virStorageSourceNewFromBacking;
|
||||
virStorageSourceNewFromBackingAbsolute;
|
||||
|
@ -2286,6 +2286,49 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virStorageSourceIsSameLocation:
|
||||
*
|
||||
* Returns true if the sources @a and @b point to the same storage location.
|
||||
* This does not compare any other configuration option
|
||||
*/
|
||||
bool
|
||||
virStorageSourceIsSameLocation(virStorageSourcePtr a,
|
||||
virStorageSourcePtr b)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
/* there are multiple possibilities to define an empty source */
|
||||
if (virStorageSourceIsEmpty(a) &&
|
||||
virStorageSourceIsEmpty(b))
|
||||
return true;
|
||||
|
||||
if (virStorageSourceGetActualType(a) != virStorageSourceGetActualType(b))
|
||||
return false;
|
||||
|
||||
if (STRNEQ_NULLABLE(a->path, b->path) ||
|
||||
STRNEQ_NULLABLE(a->volume, b->volume) ||
|
||||
STRNEQ_NULLABLE(a->snapshot, b->snapshot))
|
||||
return false;
|
||||
|
||||
if (a->type == VIR_STORAGE_TYPE_NETWORK) {
|
||||
if (a->protocol != b->protocol ||
|
||||
a->nhosts != b->nhosts)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < a->nhosts; i++) {
|
||||
if (a->hosts[i].transport != b->hosts[i].transport ||
|
||||
a->hosts[i].port != b->hosts[i].port ||
|
||||
STRNEQ_NULLABLE(a->hosts[i].name, b->hosts[i].name) ||
|
||||
STRNEQ_NULLABLE(a->hosts[i].socket, b->hosts[i].socket))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virStorageSourceInitChainElement:
|
||||
* @newelem: New backing chain element disk source
|
||||
|
@ -436,6 +436,9 @@ virStorageSourcePtr virStorageSourceNewFromBacking(virStorageSourcePtr parent);
|
||||
virStorageSourcePtr virStorageSourceCopy(const virStorageSource *src,
|
||||
bool backingChain)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
bool virStorageSourceIsSameLocation(virStorageSourcePtr a,
|
||||
virStorageSourcePtr b)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||
|
||||
int virStorageSourceParseRBDColonString(const char *rbdstr,
|
||||
virStorageSourcePtr src)
|
||||
|
Loading…
x
Reference in New Issue
Block a user