Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- storage_volume.go | 24 ++++++++++++++++++++++++ storage_volume_compat.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ storage_volume_compat.h | 15 +++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 storage_volume_compat.go Pushed as a build fix diff --git a/storage_volume.go b/storage_volume.go index 80b74fa..317a1dd 100644 --- a/storage_volume.go +++ b/storage_volume.go @@ -94,6 +94,13 @@ const ( STORAGE_XML_INACTIVE = StorageXMLFlags(C.VIR_STORAGE_XML_INACTIVE) ) +type StorageVolInfoFlags int + +const ( + STORAGE_VOL_USE_ALLOCATION = StorageVolInfoFlags(C.VIR_STORAGE_VOL_USE_ALLOCATION) + STORAGE_VOL_GET_PHYSICAL = StorageVolInfoFlags(C.VIR_STORAGE_VOL_GET_PHYSICAL) +) + type StorageVol struct { ptr C.virStorageVolPtr } @@ -133,6 +140,23 @@ func (v *StorageVol) GetInfo() (*StorageVolInfo, error) { }, nil } +func (v *StorageVol) GetInfoFlags(flags StorageVolInfoFlags) (*StorageVolInfo, error) { + if C.LIBVIR_VERSION_NUMBER < 3000000 { + return nil, GetNotImplementedError() + } + + var cinfo C.virStorageVolInfo + result := C.virStorageVolGetInfoFlagsCompat(v.ptr, &cinfo, C.uint(flags)) + if result == -1 { + return nil, GetLastError() + } + return &StorageVolInfo{ + Type: StorageVolType(cinfo._type), + Capacity: uint64(cinfo.capacity), + Allocation: uint64(cinfo.allocation), + }, nil +} + func (v *StorageVol) GetKey() (string, error) { key := C.virStorageVolGetKey(v.ptr) if key == nil { diff --git a/storage_volume_compat.go b/storage_volume_compat.go new file mode 100644 index 0000000..46f0e0b --- /dev/null +++ b/storage_volume_compat.go @@ -0,0 +1,47 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Copyright (c) 2013 Alex Zorin + * Copyright (C) 2016 Red Hat, Inc. + * + */ + +package libvirt + +/* +#cgo pkg-config: libvirt +#include <libvirt/libvirt.h> +#include <assert.h> +#include "storage_volume_compat.h" + +int virStorageVolGetInfoFlagsCompat(virStorageVolPtr vol, + virStorageVolInfoPtr info, + unsigned int flags) +{ +#if LIBVIR_VERSION_NUMBER < 3000000 + assert(0); // Caller should have checked version +#else + return virStorageVolGetInfoFlags(vol, info, flags); +#endif +} + +*/ +import "C" diff --git a/storage_volume_compat.h b/storage_volume_compat.h index 2c07445..53e83fe 100644 --- a/storage_volume_compat.h +++ b/storage_volume_compat.h @@ -27,6 +27,21 @@ #ifndef LIBVIRT_GO_STORAGE_VOLUME_COMPAT_H__ #define LIBVIRT_GO_STORAGE_VOLUME_COMPAT_H__ +/* 3.0.0 */ + +int virStorageVolGetInfoFlagsCompat(virStorageVolPtr vol, + virStorageVolInfoPtr info, + unsigned int flags); + +#ifndef VIR_STORAGE_VOL_USE_ALLOCATION +#define VIR_STORAGE_VOL_USE_ALLOCATION 0 +#endif + +#ifndef VIR_STORAGE_VOL_GET_PHYSICAL +#define VIR_STORAGE_VOL_GET_PHYSICAL 1 << 0 +#endif + + /* 1.2.13 */ #ifndef VIR_STORAGE_VOL_CREATE_REFLINK -- 2.9.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list