From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45248) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d39W6-0003Gv-LC for qemu-devel@nongnu.org; Tue, 25 Apr 2017 19:05:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d39W3-0004Sb-GZ for qemu-devel@nongnu.org; Tue, 25 Apr 2017 19:05:06 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:50474 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d39W3-0004SL-Aq for qemu-devel@nongnu.org; Tue, 25 Apr 2017 19:05:03 -0400 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v3PN43jS080944 for ; Tue, 25 Apr 2017 19:05:02 -0400 Received: from e31.co.us.ibm.com (e31.co.us.ibm.com [32.97.110.149]) by mx0b-001b2d01.pphosted.com with ESMTP id 2a2ebttyxu-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 25 Apr 2017 19:05:02 -0400 Received: from localhost by e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 25 Apr 2017 17:05:01 -0600 From: Michael Roth Date: Tue, 25 Apr 2017 18:04:41 -0500 In-Reply-To: <1493161481-29595-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1493161481-29595-1-git-send-email-mdroth@linux.vnet.ibm.com> Message-Id: <1493161481-29595-9-git-send-email-mdroth@linux.vnet.ibm.com> Subject: [Qemu-devel] [PULL 8/8] qga: Add `guest-get-timezone` command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Vinzenz Feenstra From: Vinzenz Feenstra 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 Reviewed-by: Sameeh Jubran Tested-by: Sameeh Jubran * moved stub implementation to end of function for consistency Signed-off-by: Michael Roth --- qga/commands.c | 38 ++++++++++++++++++++++++++++++++++++++ qga/qapi-schema.json | 24 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/qga/commands.c b/qga/commands.c index 57a31bb..3333ed5 100644 --- a/qga/commands.c +++ b/qga/commands.c @@ -510,3 +510,41 @@ GuestHostName *qmp_guest_get_host_name(Error **err) } return result; } + +GuestTimezone *qmp_guest_get_timezone(Error **errp) +{ +#if GLIB_CHECK_VERSION(2, 28, 0) + 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; +#else + error_setg(errp, QERR_UNSUPPORTED); + return NULL; +#endif +} diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json index f25467a..5c325b1 100644 --- a/qga/qapi-schema.json +++ b/qga/qapi-schema.json @@ -1101,3 +1101,27 @@ ## { 'command': 'guest-get-users', 'returns': ['GuestUser'] } + +## +# @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.7.4