Skip to content

Commit

Permalink
qga: Use common time encoding for guest-get-devices 'driver-date'
Browse files Browse the repository at this point in the history
guest-get-devices returns 'driver-date' as string in the format
YYYY-MM-DD.  Goes back to recent commit 2e4211c "qga: add command
guest-get-devices for reporting VirtIO devices".

We should avoid use of multiple encodings for the same kind of data.
Especially string encodings.  Change it to return nanoseconds since
the epoch, like guest-get-time does.

Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
Signed-off-by: Michael Roth <[email protected]>
  • Loading branch information
Markus Armbruster authored and mdroth committed Nov 2, 2020
1 parent b519e2e commit a88bcee
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
19 changes: 11 additions & 8 deletions qga/commands-win32.c
Original file line number Diff line number Diff line change
Expand Up @@ -1641,6 +1641,12 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
return head;
}

static int64_t filetime_to_ns(const FILETIME *tf)
{
return ((((int64_t)tf->dwHighDateTime << 32) | tf->dwLowDateTime)
- W32_FT_OFFSET) * 100;
}

int64_t qmp_guest_get_time(Error **errp)
{
SYSTEMTIME ts = {0};
Expand All @@ -1657,8 +1663,7 @@ int64_t qmp_guest_get_time(Error **errp)
return -1;
}

return ((((int64_t)tf.dwHighDateTime << 32) | tf.dwLowDateTime)
- W32_FT_OFFSET) * 100;
return filetime_to_ns(&tf);
}

void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
Expand Down Expand Up @@ -2363,7 +2368,6 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
slog("enumerating devices");
for (i = 0; SetupDiEnumDeviceInfo(dev_info, i, &dev_info_data); i++) {
bool skip = true;
SYSTEMTIME utc_date;
g_autofree LPWSTR name = NULL;
g_autofree LPFILETIME date = NULL;
g_autofree LPWSTR version = NULL;
Expand Down Expand Up @@ -2434,13 +2438,12 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
slog("failed to get driver date");
continue;
}
FileTimeToSystemTime(date, &utc_date);
device->driver_date = g_strdup_printf("%04d-%02d-%02d",
utc_date.wYear, utc_date.wMonth, utc_date.wDay);
device->driver_date = filetime_to_ns(date);
device->has_driver_date = true;

slog("driver: %s\ndriver version: %s,%s\n", device->driver_name,
device->driver_date, device->driver_version);
slog("driver: %s\ndriver version: %" PRId64 ",%s\n",
device->driver_name, device->driver_date,
device->driver_version);
item = g_new0(GuestDeviceInfoList, 1);
item->value = g_steal_pointer(&device);
if (!cur_item) {
Expand Down
4 changes: 2 additions & 2 deletions qga/qapi-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1282,7 +1282,7 @@
# @GuestDeviceInfo:
#
# @driver-name: name of the associated driver
# @driver-date: driver release date in format YYYY-MM-DD
# @driver-date: driver release date, in nanoseconds since the epoch
# @driver-version: driver version
# @id: device ID
#
Expand All @@ -1291,7 +1291,7 @@
{ 'struct': 'GuestDeviceInfo',
'data': {
'driver-name': 'str',
'*driver-date': 'str',
'*driver-date': 'int',
'*driver-version': 'str',
'*id': 'GuestDeviceId'
} }
Expand Down

0 comments on commit a88bcee

Please sign in to comment.