From 0fb30652b54aa0d36b9720becd9f3c3deb7a7806 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Fri, 3 May 2019 15:46:57 +0200 Subject: Add support for /etc/TZ as default value for $TZ This is used by uClibc, at least. [ChangeLog][QtCore][QTimeZone] The TZDB back-end now recognizes the contents of /etc/TZ as a fall-back for $TZ (as used by uClibc). Fixes: QTBUG-75565 Change-Id: I3067e2d023cf30a85633575b5d7dc0ee3ec36927 Reviewed-by: Thiago Macieira --- src/corelib/tools/qtimezoneprivate_tz.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/corelib/tools/qtimezoneprivate_tz.cpp') diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp index d9e87212d3..f5440799ab 100644 --- a/src/corelib/tools/qtimezoneprivate_tz.cpp +++ b/src/corelib/tools/qtimezoneprivate_tz.cpp @@ -659,7 +659,7 @@ void QTzTimeZonePrivate::init(const QByteArray &ianaId) if (!tzif.open(QIODevice::ReadOnly)) { tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId)); if (!tzif.open(QIODevice::ReadOnly)) { - // ianaId may be a POSIX rule, taken from $TZ + // ianaId may be a POSIX rule, taken from $TZ or /etc/TZ const QByteArray zoneInfo = ianaId.split(',').at(0); const char *begin = zoneInfo.constBegin(); if (PosixZone::parse(begin, zoneInfo.constEnd()).hasValidOffset() @@ -1114,6 +1114,13 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const } } + // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ: + if (ianaId.isEmpty()) { + QFile zone(QStringLiteral("/etc/TZ")); + if (zone.open(QIODevice::ReadOnly)) + ianaId = zone.readAll().trimmed(); + } + // Give up for now and return UTC if (ianaId.isEmpty()) ianaId = utcQByteArray(); -- cgit v1.2.3