All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v6 0/1] qga: Add `guest-get-timezone` command
@ 2017-04-19 10:52 Vinzenz 'evilissimo' Feenstra
  2017-04-19 10:52 ` [Qemu-devel] [PATCH v6 1/1] " Vinzenz 'evilissimo' Feenstra
  0 siblings, 1 reply; 3+ messages in thread
From: Vinzenz 'evilissimo' Feenstra @ 2017-04-19 10:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau, sameeh, mdroth, Vinzenz Feenstra

From: Vinzenz Feenstra <vfeenstr@redhat.com>

Changes since v5:
- Dropped unnecessary g_time_zone_unref in error handling
- Made implementation check for glib 2.28 or higher
- Move variable declaration to function top

Vinzenz Feenstra (1):
  qga: Add `guest-get-timezone` command

 qga/commands.c       | 38 ++++++++++++++++++++++++++++++++++++++
 qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PATCH v6 1/1] qga: Add `guest-get-timezone` command
  2017-04-19 10:52 [Qemu-devel] [PATCH v6 0/1] qga: Add `guest-get-timezone` command Vinzenz 'evilissimo' Feenstra
@ 2017-04-19 10:52 ` Vinzenz 'evilissimo' Feenstra
  2017-04-25 20:52   ` Michael Roth
  0 siblings, 1 reply; 3+ messages in thread
From: Vinzenz 'evilissimo' Feenstra @ 2017-04-19 10:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: marcandre.lureau, sameeh, mdroth, Vinzenz Feenstra

From: Vinzenz Feenstra <vfeenstr@redhat.com>

Adds a new command `guest-get-timezone` reporting the currently
configured timezone on the system. The information on what timezone is
currently is configured is useful in case of Windows VMs where the
offset of the hardware clock is required to have the same offset. This
can be used for management systems like `oVirt` to detect the timezone
difference and warn administrators of the misconfiguration.

Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>
---
 qga/commands.c       | 38 ++++++++++++++++++++++++++++++++++++++
 qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/qga/commands.c b/qga/commands.c
index 4d92946..999538d 100644
--- a/qga/commands.c
+++ b/qga/commands.c
@@ -499,3 +499,41 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp)
     error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
     return -1;
 }
+
+GuestTimezone *qmp_guest_get_timezone(Error **errp)
+{
+#if !GLIB_CHECK_VERSION(2, 28, 0)
+    error_setg(errp, QERR_UNSUPPORTED);
+    return NULL;
+#else
+    GuestTimezone *info = NULL;
+    GTimeZone *tz = NULL;
+    gint64 now = 0;
+    gint32 intv = 0;
+    gchar const *name = NULL;
+
+    info = g_new0(GuestTimezone, 1);
+    tz = g_time_zone_new_local();
+    if (tz == NULL) {
+        error_setg(errp, QERR_QGA_COMMAND_FAILED,
+                   "Couldn't retrieve local timezone");
+        goto error;
+    }
+
+    now = g_get_real_time() / G_USEC_PER_SEC;
+    intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL, now);
+    info->offset = g_time_zone_get_offset(tz, intv);
+    name = g_time_zone_get_abbreviation(tz, intv);
+    if (name != NULL) {
+        info->has_zone = true;
+        info->zone = g_strdup(name);
+    }
+    g_time_zone_unref(tz);
+
+    return info;
+
+error:
+    g_free(info);
+    return NULL;
+#endif
+}
diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
index a02dbf2..5183ea2 100644
--- a/qga/qapi-schema.json
+++ b/qga/qapi-schema.json
@@ -1042,3 +1042,29 @@
   'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
                '*input-data': 'str', '*capture-output': 'bool' },
   'returns': 'GuestExec' }
+
+
+##
+# @GuestTimezone:
+#
+# @zone:    Timezone name
+# @offset:  Offset to UTC in seconds, negative numbers for time zones west of
+#           GMT, positive numbers for east
+#
+# Since: 2.10
+##
+{ 'struct': 'GuestTimezone',
+  'data':   { '*zone': 'str', 'offset': 'int' } }
+
+
+##
+# @guest-get-timezone:
+#
+# Retrieves the timezone information from the guest.
+#
+# Returns: A GuestTimezone dictionary.
+#
+# Since: 2.10
+##
+{ 'command': 'guest-get-timezone',
+  'returns': 'GuestTimezone' }
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v6 1/1] qga: Add `guest-get-timezone` command
  2017-04-19 10:52 ` [Qemu-devel] [PATCH v6 1/1] " Vinzenz 'evilissimo' Feenstra
@ 2017-04-25 20:52   ` Michael Roth
  0 siblings, 0 replies; 3+ messages in thread
From: Michael Roth @ 2017-04-25 20:52 UTC (permalink / raw)
  To: Vinzenz 'evilissimo' Feenstra, qemu-devel
  Cc: marcandre.lureau, sameeh

Quoting Vinzenz 'evilissimo' Feenstra (2017-04-19 05:52:58)
> From: Vinzenz Feenstra <vfeenstr@redhat.com>
> 
> Adds a new command `guest-get-timezone` reporting the currently
> configured timezone on the system. The information on what timezone is
> currently is configured is useful in case of Windows VMs where the
> offset of the hardware clock is required to have the same offset. This
> can be used for management systems like `oVirt` to detect the timezone
> difference and warn administrators of the misconfiguration.
> 
> Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>

Thanks, applied to qga tree:
  https://github.com/mdroth/qemu/commits/qga

> ---
>  qga/commands.c       | 38 ++++++++++++++++++++++++++++++++++++++
>  qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
>  2 files changed, 64 insertions(+)
> 
> diff --git a/qga/commands.c b/qga/commands.c
> index 4d92946..999538d 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -499,3 +499,41 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp)
>      error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
>      return -1;
>  }
> +
> +GuestTimezone *qmp_guest_get_timezone(Error **errp)
> +{
> +#if !GLIB_CHECK_VERSION(2, 28, 0)
> +    error_setg(errp, QERR_UNSUPPORTED);
> +    return NULL;
> +#else
> +    GuestTimezone *info = NULL;
> +    GTimeZone *tz = NULL;
> +    gint64 now = 0;
> +    gint32 intv = 0;
> +    gchar const *name = NULL;
> +
> +    info = g_new0(GuestTimezone, 1);
> +    tz = g_time_zone_new_local();
> +    if (tz == NULL) {
> +        error_setg(errp, QERR_QGA_COMMAND_FAILED,
> +                   "Couldn't retrieve local timezone");
> +        goto error;
> +    }
> +
> +    now = g_get_real_time() / G_USEC_PER_SEC;
> +    intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL, now);
> +    info->offset = g_time_zone_get_offset(tz, intv);
> +    name = g_time_zone_get_abbreviation(tz, intv);
> +    if (name != NULL) {
> +        info->has_zone = true;
> +        info->zone = g_strdup(name);
> +    }
> +    g_time_zone_unref(tz);
> +
> +    return info;
> +
> +error:
> +    g_free(info);
> +    return NULL;
> +#endif
> +}
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index a02dbf2..5183ea2 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1042,3 +1042,29 @@
>    'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
>                 '*input-data': 'str', '*capture-output': 'bool' },
>    'returns': 'GuestExec' }
> +
> +
> +##
> +# @GuestTimezone:
> +#
> +# @zone:    Timezone name
> +# @offset:  Offset to UTC in seconds, negative numbers for time zones west of
> +#           GMT, positive numbers for east
> +#
> +# Since: 2.10
> +##
> +{ 'struct': 'GuestTimezone',
> +  'data':   { '*zone': 'str', 'offset': 'int' } }
> +
> +
> +##
> +# @guest-get-timezone:
> +#
> +# Retrieves the timezone information from the guest.
> +#
> +# Returns: A GuestTimezone dictionary.
> +#
> +# Since: 2.10
> +##
> +{ 'command': 'guest-get-timezone',
> +  'returns': 'GuestTimezone' }
> -- 
> 2.9.3
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-04-25 21:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-19 10:52 [Qemu-devel] [PATCH v6 0/1] qga: Add `guest-get-timezone` command Vinzenz 'evilissimo' Feenstra
2017-04-19 10:52 ` [Qemu-devel] [PATCH v6 1/1] " Vinzenz 'evilissimo' Feenstra
2017-04-25 20:52   ` Michael Roth

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.