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

Reply via email to