提交 4fac30d9 编写于 作者: M Michal Privoznik

virpci: Introduce virPCIDeviceAddressCopy

This helper is cleaner than plain memcpy() because one doesn't
have to look into virPCIDeviceAddress struct to see if it
contains any strings / pointers.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
ACKed-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NCole Robinson <crobinso@redhat.com>
上级 ec4ad1a5
...@@ -2706,6 +2706,7 @@ virObjectUnref; ...@@ -2706,6 +2706,7 @@ virObjectUnref;
# util/virpci.h # util/virpci.h
virPCIDeviceAddressAsString; virPCIDeviceAddressAsString;
virPCIDeviceAddressCopy;
virPCIDeviceAddressEqual; virPCIDeviceAddressEqual;
virPCIDeviceAddressFree; virPCIDeviceAddressFree;
virPCIDeviceAddressGetIOMMUGroupAddresses; virPCIDeviceAddressGetIOMMUGroupAddresses;
......
...@@ -1340,6 +1340,20 @@ virPCIDeviceAddressEqual(const virPCIDeviceAddress *addr1, ...@@ -1340,6 +1340,20 @@ virPCIDeviceAddressEqual(const virPCIDeviceAddress *addr1,
return false; return false;
} }
/**
* virPCIDeviceAddressCopy:
* @dst: where to store address
* @src: source address to copy
*
* Creates a deep copy of given @src address and stores it into
* @dst which has to be pre-allocated by caller.
*/
void virPCIDeviceAddressCopy(virPCIDeviceAddressPtr dst,
const virPCIDeviceAddress *src)
{
memcpy(dst, src, sizeof(*src));
}
char * char *
virPCIDeviceAddressAsString(const virPCIDeviceAddress *addr) virPCIDeviceAddressAsString(const virPCIDeviceAddress *addr)
{ {
......
...@@ -44,6 +44,7 @@ typedef virZPCIDeviceAddress *virZPCIDeviceAddressPtr; ...@@ -44,6 +44,7 @@ typedef virZPCIDeviceAddress *virZPCIDeviceAddressPtr;
struct _virZPCIDeviceAddress { struct _virZPCIDeviceAddress {
unsigned int uid; /* exempt from syntax-check */ unsigned int uid; /* exempt from syntax-check */
unsigned int fid; unsigned int fid;
/* Don't forget to update virPCIDeviceAddressCopy if needed. */
}; };
#define VIR_PCI_DEVICE_ADDRESS_FMT "%04x:%02x:%02x.%d" #define VIR_PCI_DEVICE_ADDRESS_FMT "%04x:%02x:%02x.%d"
...@@ -56,6 +57,7 @@ struct _virPCIDeviceAddress { ...@@ -56,6 +57,7 @@ struct _virPCIDeviceAddress {
int multi; /* virTristateSwitch */ int multi; /* virTristateSwitch */
int extFlags; /* enum virPCIDeviceAddressExtensionFlags */ int extFlags; /* enum virPCIDeviceAddressExtensionFlags */
virZPCIDeviceAddress zpci; virZPCIDeviceAddress zpci;
/* Don't forget to update virPCIDeviceAddressCopy if needed. */
}; };
typedef enum { typedef enum {
...@@ -236,6 +238,8 @@ bool virPCIDeviceAddressIsEmpty(const virPCIDeviceAddress *addr); ...@@ -236,6 +238,8 @@ bool virPCIDeviceAddressIsEmpty(const virPCIDeviceAddress *addr);
bool virPCIDeviceAddressEqual(const virPCIDeviceAddress *addr1, bool virPCIDeviceAddressEqual(const virPCIDeviceAddress *addr1,
const virPCIDeviceAddress *addr2); const virPCIDeviceAddress *addr2);
void virPCIDeviceAddressCopy(virPCIDeviceAddressPtr dst,
const virPCIDeviceAddress *src);
char *virPCIDeviceAddressAsString(const virPCIDeviceAddress *addr) char *virPCIDeviceAddressAsString(const virPCIDeviceAddress *addr)
ATTRIBUTE_NONNULL(1); ATTRIBUTE_NONNULL(1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册