if ((VIR_STRDUP(iface_ret->name, iface->name)) < 0)
goto cleanup;
- if ((VIR_STRDUP(iface_ret->hwaddr, iface->hwaddr)) < 0)
+ if (iface->hwaddr &&
+ (VIR_ALLOC(iface_ret->hwaddr) < 0 ||
+ VIR_STRDUP(*iface_ret->hwaddr, iface->hwaddr) < 0))
goto cleanup;
if (iface->naddrs > REMOTE_DOMAIN_IP_ADDR_MAX) {
for (i = 0; i < ifaces_count; i++) {
remote_domain_interface *iface_ret = &(ret->ifaces.ifaces_val[i]);
VIR_FREE(iface_ret->name);
- VIR_FREE(iface_ret->hwaddr);
+ if (iface_ret->hwaddr) {
+ VIR_FREE(*iface_ret->hwaddr);
+ VIR_FREE(iface_ret->hwaddr);
+ }
for (j = 0; j < iface_ret->addrs.addrs_len; j++) {
remote_domain_ip_addr *ip_addr =
&(iface_ret->addrs.addrs_val[j]);
typedef virDomainInterface *virDomainInterfacePtr;
struct _virDomainInterface {
char *name; /* interface name */
- char *hwaddr; /* hardware address */
+ char *hwaddr; /* hardware address, may be NULL */
unsigned int naddrs; /* number of items in @addrs */
virDomainIPAddressPtr addrs; /* array of IP addresses */
};
* ... do something with returned values, for example:
* for (i = 0; i < ifaces_count; i++) {
* printf("name: %s", ifaces[i]->name);
- * printf(" hwaddr: %s", ifaces[i]->hwaddr);
+ * if (ifaces[i]->hwaddr)
+ * printf(" hwaddr: %s", ifaces[i]->hwaddr);
*
* for (j = 0; j < ifaces[i]->naddrs; j++) {
* virDomainIPAddressPtr ip_addr = ifaces[i]->addrs + j;
if (VIR_STRDUP(iface->name, iface_ret->name) < 0)
goto cleanup;
- if (VIR_STRDUP(iface->hwaddr, iface_ret->hwaddr) < 0)
+ if (iface_ret->hwaddr &&
+ VIR_STRDUP(iface->hwaddr, *iface_ret->hwaddr) < 0)
goto cleanup;
if (iface_ret->addrs.addrs_len > REMOTE_DOMAIN_IP_ADDR_MAX) {
struct remote_domain_interface {
remote_nonnull_string name;
- remote_nonnull_string hwaddr;
+ remote_string hwaddr;
remote_domain_ip_addr addrs<REMOTE_DOMAIN_IP_ADDR_MAX>;
};
};
struct remote_domain_interface {
remote_nonnull_string name;
- remote_nonnull_string hwaddr;
+ remote_string hwaddr;
struct {
u_int addrs_len;
remote_domain_ip_addr * addrs_val;