|
@@ -1624,11 +1624,11 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
|
{
|
|
{
|
|
IP_ADAPTER_ADDRESSES *adptr_addrs, *addr;
|
|
IP_ADAPTER_ADDRESSES *adptr_addrs, *addr;
|
|
IP_ADAPTER_UNICAST_ADDRESS *ip_addr = NULL;
|
|
IP_ADAPTER_UNICAST_ADDRESS *ip_addr = NULL;
|
|
- GuestNetworkInterfaceList *head = NULL, *cur_item = NULL;
|
|
|
|
- GuestIpAddressList *head_addr, *cur_addr;
|
|
|
|
- GuestNetworkInterfaceList *info;
|
|
|
|
|
|
+ GuestNetworkInterfaceList *head = NULL, **tail = &head;
|
|
|
|
+ GuestIpAddressList *head_addr, **tail_addr;
|
|
|
|
+ GuestNetworkInterface *info;
|
|
GuestNetworkInterfaceStat *interface_stat = NULL;
|
|
GuestNetworkInterfaceStat *interface_stat = NULL;
|
|
- GuestIpAddressList *address_item = NULL;
|
|
|
|
|
|
+ GuestIpAddress *address_item = NULL;
|
|
unsigned char *mac_addr;
|
|
unsigned char *mac_addr;
|
|
char *addr_str;
|
|
char *addr_str;
|
|
WORD wsa_version;
|
|
WORD wsa_version;
|
|
@@ -1651,30 +1651,24 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
|
for (addr = adptr_addrs; addr; addr = addr->Next) {
|
|
for (addr = adptr_addrs; addr; addr = addr->Next) {
|
|
info = g_malloc0(sizeof(*info));
|
|
info = g_malloc0(sizeof(*info));
|
|
|
|
|
|
- if (cur_item == NULL) {
|
|
|
|
- head = cur_item = info;
|
|
|
|
- } else {
|
|
|
|
- cur_item->next = info;
|
|
|
|
- cur_item = info;
|
|
|
|
- }
|
|
|
|
|
|
+ QAPI_LIST_APPEND(tail, info);
|
|
|
|
|
|
- info->value = g_malloc0(sizeof(*info->value));
|
|
|
|
- info->value->name = guest_wctomb_dup(addr->FriendlyName);
|
|
|
|
|
|
+ info->name = guest_wctomb_dup(addr->FriendlyName);
|
|
|
|
|
|
if (addr->PhysicalAddressLength != 0) {
|
|
if (addr->PhysicalAddressLength != 0) {
|
|
mac_addr = addr->PhysicalAddress;
|
|
mac_addr = addr->PhysicalAddress;
|
|
|
|
|
|
- info->value->hardware_address =
|
|
|
|
|
|
+ info->hardware_address =
|
|
g_strdup_printf("%02x:%02x:%02x:%02x:%02x:%02x",
|
|
g_strdup_printf("%02x:%02x:%02x:%02x:%02x:%02x",
|
|
(int) mac_addr[0], (int) mac_addr[1],
|
|
(int) mac_addr[0], (int) mac_addr[1],
|
|
(int) mac_addr[2], (int) mac_addr[3],
|
|
(int) mac_addr[2], (int) mac_addr[3],
|
|
(int) mac_addr[4], (int) mac_addr[5]);
|
|
(int) mac_addr[4], (int) mac_addr[5]);
|
|
|
|
|
|
- info->value->has_hardware_address = true;
|
|
|
|
|
|
+ info->has_hardware_address = true;
|
|
}
|
|
}
|
|
|
|
|
|
head_addr = NULL;
|
|
head_addr = NULL;
|
|
- cur_addr = NULL;
|
|
|
|
|
|
+ tail_addr = &head_addr;
|
|
for (ip_addr = addr->FirstUnicastAddress;
|
|
for (ip_addr = addr->FirstUnicastAddress;
|
|
ip_addr;
|
|
ip_addr;
|
|
ip_addr = ip_addr->Next) {
|
|
ip_addr = ip_addr->Next) {
|
|
@@ -1685,37 +1679,29 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
|
|
|
|
|
address_item = g_malloc0(sizeof(*address_item));
|
|
address_item = g_malloc0(sizeof(*address_item));
|
|
|
|
|
|
- if (!cur_addr) {
|
|
|
|
- head_addr = cur_addr = address_item;
|
|
|
|
- } else {
|
|
|
|
- cur_addr->next = address_item;
|
|
|
|
- cur_addr = address_item;
|
|
|
|
- }
|
|
|
|
|
|
+ QAPI_LIST_APPEND(tail_addr, address_item);
|
|
|
|
|
|
- address_item->value = g_malloc0(sizeof(*address_item->value));
|
|
|
|
- address_item->value->ip_address = addr_str;
|
|
|
|
- address_item->value->prefix = guest_ip_prefix(ip_addr);
|
|
|
|
|
|
+ address_item->ip_address = addr_str;
|
|
|
|
+ address_item->prefix = guest_ip_prefix(ip_addr);
|
|
if (ip_addr->Address.lpSockaddr->sa_family == AF_INET) {
|
|
if (ip_addr->Address.lpSockaddr->sa_family == AF_INET) {
|
|
- address_item->value->ip_address_type =
|
|
|
|
- GUEST_IP_ADDRESS_TYPE_IPV4;
|
|
|
|
|
|
+ address_item->ip_address_type = GUEST_IP_ADDRESS_TYPE_IPV4;
|
|
} else if (ip_addr->Address.lpSockaddr->sa_family == AF_INET6) {
|
|
} else if (ip_addr->Address.lpSockaddr->sa_family == AF_INET6) {
|
|
- address_item->value->ip_address_type =
|
|
|
|
- GUEST_IP_ADDRESS_TYPE_IPV6;
|
|
|
|
|
|
+ address_item->ip_address_type = GUEST_IP_ADDRESS_TYPE_IPV6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (head_addr) {
|
|
if (head_addr) {
|
|
- info->value->has_ip_addresses = true;
|
|
|
|
- info->value->ip_addresses = head_addr;
|
|
|
|
|
|
+ info->has_ip_addresses = true;
|
|
|
|
+ info->ip_addresses = head_addr;
|
|
}
|
|
}
|
|
- if (!info->value->has_statistics) {
|
|
|
|
|
|
+ if (!info->has_statistics) {
|
|
interface_stat = g_malloc0(sizeof(*interface_stat));
|
|
interface_stat = g_malloc0(sizeof(*interface_stat));
|
|
if (guest_get_network_stats(addr->AdapterName,
|
|
if (guest_get_network_stats(addr->AdapterName,
|
|
interface_stat) == -1) {
|
|
interface_stat) == -1) {
|
|
- info->value->has_statistics = false;
|
|
|
|
|
|
+ info->has_statistics = false;
|
|
g_free(interface_stat);
|
|
g_free(interface_stat);
|
|
} else {
|
|
} else {
|
|
- info->value->statistics = interface_stat;
|
|
|
|
- info->value->has_statistics = true;
|
|
|
|
|
|
+ info->statistics = interface_stat;
|
|
|
|
+ info->has_statistics = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1833,7 +1819,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
|
|
{
|
|
{
|
|
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pslpi, ptr;
|
|
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pslpi, ptr;
|
|
DWORD length;
|
|
DWORD length;
|
|
- GuestLogicalProcessorList *head, **link;
|
|
|
|
|
|
+ GuestLogicalProcessorList *head, **tail;
|
|
Error *local_err = NULL;
|
|
Error *local_err = NULL;
|
|
int64_t current;
|
|
int64_t current;
|
|
|
|
|
|
@@ -1841,7 +1827,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
|
|
length = 0;
|
|
length = 0;
|
|
current = 0;
|
|
current = 0;
|
|
head = NULL;
|
|
head = NULL;
|
|
- link = &head;
|
|
|
|
|
|
+ tail = &head;
|
|
|
|
|
|
if ((GetLogicalProcessorInformation(pslpi, &length) == FALSE) &&
|
|
if ((GetLogicalProcessorInformation(pslpi, &length) == FALSE) &&
|
|
(GetLastError() == ERROR_INSUFFICIENT_BUFFER) &&
|
|
(GetLastError() == ERROR_INSUFFICIENT_BUFFER) &&
|
|
@@ -1864,18 +1850,13 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
|
|
while (cpu_bits > 0) {
|
|
while (cpu_bits > 0) {
|
|
if (!!(cpu_bits & 1)) {
|
|
if (!!(cpu_bits & 1)) {
|
|
GuestLogicalProcessor *vcpu;
|
|
GuestLogicalProcessor *vcpu;
|
|
- GuestLogicalProcessorList *entry;
|
|
|
|
|
|
|
|
vcpu = g_malloc0(sizeof *vcpu);
|
|
vcpu = g_malloc0(sizeof *vcpu);
|
|
vcpu->logical_id = current++;
|
|
vcpu->logical_id = current++;
|
|
vcpu->online = true;
|
|
vcpu->online = true;
|
|
vcpu->has_can_offline = true;
|
|
vcpu->has_can_offline = true;
|
|
|
|
|
|
- entry = g_malloc0(sizeof *entry);
|
|
|
|
- entry->value = vcpu;
|
|
|
|
-
|
|
|
|
- *link = entry;
|
|
|
|
- link = &entry->next;
|
|
|
|
|
|
+ QAPI_LIST_APPEND(tail, vcpu);
|
|
}
|
|
}
|
|
cpu_bits >>= 1;
|
|
cpu_bits >>= 1;
|
|
}
|
|
}
|
|
@@ -2087,12 +2068,11 @@ GuestUserList *qmp_guest_get_users(Error **errp)
|
|
#define QGA_NANOSECONDS 10000000
|
|
#define QGA_NANOSECONDS 10000000
|
|
|
|
|
|
GHashTable *cache = NULL;
|
|
GHashTable *cache = NULL;
|
|
- GuestUserList *head = NULL, *cur_item = NULL;
|
|
|
|
|
|
+ GuestUserList *head = NULL, **tail = &head;
|
|
|
|
|
|
DWORD buffer_size = 0, count = 0, i = 0;
|
|
DWORD buffer_size = 0, count = 0, i = 0;
|
|
GA_WTSINFOA *info = NULL;
|
|
GA_WTSINFOA *info = NULL;
|
|
WTS_SESSION_INFOA *entries = NULL;
|
|
WTS_SESSION_INFOA *entries = NULL;
|
|
- GuestUserList *item = NULL;
|
|
|
|
GuestUser *user = NULL;
|
|
GuestUser *user = NULL;
|
|
gpointer value = NULL;
|
|
gpointer value = NULL;
|
|
INT64 login = 0;
|
|
INT64 login = 0;
|
|
@@ -2128,23 +2108,17 @@ GuestUserList *qmp_guest_get_users(Error **errp)
|
|
user->login_time = login_time;
|
|
user->login_time = login_time;
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- item = g_new0(GuestUserList, 1);
|
|
|
|
- item->value = g_new0(GuestUser, 1);
|
|
|
|
|
|
+ user = g_new0(GuestUser, 1);
|
|
|
|
|
|
- item->value->user = g_strdup(info->UserName);
|
|
|
|
- item->value->domain = g_strdup(info->Domain);
|
|
|
|
- item->value->has_domain = true;
|
|
|
|
|
|
+ user->user = g_strdup(info->UserName);
|
|
|
|
+ user->domain = g_strdup(info->Domain);
|
|
|
|
+ user->has_domain = true;
|
|
|
|
|
|
- item->value->login_time = login_time;
|
|
|
|
|
|
+ user->login_time = login_time;
|
|
|
|
|
|
- g_hash_table_add(cache, item->value->user);
|
|
|
|
|
|
+ g_hash_table_add(cache, user->user);
|
|
|
|
|
|
- if (!cur_item) {
|
|
|
|
- head = cur_item = item;
|
|
|
|
- } else {
|
|
|
|
- cur_item->next = item;
|
|
|
|
- cur_item = item;
|
|
|
|
- }
|
|
|
|
|
|
+ QAPI_LIST_APPEND(tail, user);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
WTSFreeMemory(info);
|
|
WTSFreeMemory(info);
|
|
@@ -2429,7 +2403,7 @@ static GStrv ga_get_hardware_ids(DEVINST devInstance)
|
|
|
|
|
|
GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
|
|
GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
|
|
{
|
|
{
|
|
- GuestDeviceInfoList *head = NULL, *cur_item = NULL, *item = NULL;
|
|
|
|
|
|
+ GuestDeviceInfoList *head = NULL, **tail = &head;
|
|
HDEVINFO dev_info = INVALID_HANDLE_VALUE;
|
|
HDEVINFO dev_info = INVALID_HANDLE_VALUE;
|
|
SP_DEVINFO_DATA dev_info_data;
|
|
SP_DEVINFO_DATA dev_info_data;
|
|
int i, j;
|
|
int i, j;
|
|
@@ -2527,14 +2501,7 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
|
|
slog("driver: %s\ndriver version: %" PRId64 ",%s\n",
|
|
slog("driver: %s\ndriver version: %" PRId64 ",%s\n",
|
|
device->driver_name, device->driver_date,
|
|
device->driver_name, device->driver_date,
|
|
device->driver_version);
|
|
device->driver_version);
|
|
- item = g_new0(GuestDeviceInfoList, 1);
|
|
|
|
- item->value = g_steal_pointer(&device);
|
|
|
|
- if (!cur_item) {
|
|
|
|
- head = cur_item = item;
|
|
|
|
- } else {
|
|
|
|
- cur_item->next = item;
|
|
|
|
- cur_item = item;
|
|
|
|
- }
|
|
|
|
|
|
+ QAPI_LIST_APPEND(tail, g_steal_pointer(&device));
|
|
}
|
|
}
|
|
|
|
|
|
if (dev_info != INVALID_HANDLE_VALUE) {
|
|
if (dev_info != INVALID_HANDLE_VALUE) {
|