Hi On Wed, Oct 21, 2020 at 11:18 AM Markus Armbruster <arm...@redhat.com> wrote:
> guest-get-devices returns 'driver-date' as string in the format > YYYY-MM-DD. Goes back to recent commit 2e4211cee4 "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 <arm...@redhat.com> > I think I assumed it was free form human-friendly string, but it has a strict YYYY-MM-DD format in the doc, so let's use the existing one instead. Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > qga/qapi-schema.json | 4 ++-- > qga/commands-win32.c | 19 +++++++++++-------- > 2 files changed, 13 insertions(+), 10 deletions(-) > > diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json > index f2c81cda2b..c7bfb8bf6a 100644 > --- a/qga/qapi-schema.json > +++ b/qga/qapi-schema.json > @@ -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 > # > @@ -1291,7 +1291,7 @@ > { 'struct': 'GuestDeviceInfo', > 'data': { > 'driver-name': 'str', > - '*driver-date': 'str', > + '*driver-date': 'int', > '*driver-version': 'str', > '*id': 'GuestDeviceId' > } } > diff --git a/qga/commands-win32.c b/qga/commands-win32.c > index 879b02b6c3..b01616a992 100644 > --- a/qga/commands-win32.c > +++ b/qga/commands-win32.c > @@ -1641,6 +1641,12 @@ out: > 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}; > @@ -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) > @@ -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; > @@ -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) { > -- > 2.26.2 > > > -- Marc-André Lureau