From e2fd2a054fdd697166fde626b7a0cc5bc61d23de Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 7 Sep 2021 04:53:25 +0300 Subject: [PATCH] use DST/non-DST tzname value depending on localtime fixes timezone query on host using musl libc Signed-off-by: Ivailo Monev --- src/core/qcorecommon_p.h | 13 ++++++++++++- src/core/tools/qdatetime.cpp | 8 ++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/core/qcorecommon_p.h b/src/core/qcorecommon_p.h index 99e6bb7a1..4fb0544c9 100644 --- a/src/core/qcorecommon_p.h +++ b/src/core/qcorecommon_p.h @@ -44,8 +44,19 @@ static inline uint foldCase(const uint ch, uint &last) static inline QString timeZone() { + // posix compliant system + time_t ltime; + ::time(<ime); + ::tzset(); - return QString::fromLocal8Bit(tzname[1]); +#if !defined(QT_NO_THREAD) + // use the reentrant version of localtime() where available + struct tm res; + struct tm *t = ::localtime_r(<ime, &res); +#else + struct tm *t = ::localtime(<ime); +#endif // !QT_NO_THREAD + return QString::fromLocal8Bit(tzname[t->tm_isdst]); } // Returns a human readable representation of the first \a len diff --git a/src/core/tools/qdatetime.cpp b/src/core/tools/qdatetime.cpp index 6cfc1559d..4b855d78c 100644 --- a/src/core/tools/qdatetime.cpp +++ b/src/core/tools/qdatetime.cpp @@ -2764,7 +2764,7 @@ QDate QDate::currentDate() #if !defined(QT_NO_THREAD) // use the reentrant version of localtime() where available - tzset(); + ::tzset(); struct tm res; struct tm *t = ::localtime_r(<ime, &res); #else @@ -2784,7 +2784,7 @@ QTime QTime::currentTime() #if !defined(QT_NO_THREAD) // use the reentrant version of localtime() where available - tzset(); + ::tzset(); struct tm res; struct tm *t = ::localtime_r(&tv.tv_sec, &res); #else @@ -2805,7 +2805,7 @@ QDateTime QDateTime::currentDateTime() #if !defined(QT_NO_THREAD) // use the reentrant version of localtime() where available - tzset(); + ::tzset(); struct tm res; struct tm *t = ::localtime_r(&tv.tv_sec, &res); #else @@ -3464,7 +3464,7 @@ static QDateTimePrivate::Spec utcToLocal(QDate &date, QTime &time) #if !defined(QT_NO_THREAD) // use the reentrant version of localtime() where available - tzset(); + ::tzset(); struct tm res; struct tm *brokenDown = ::localtime_r(&secsSince1Jan1970UTC, &res); #else -- 2.11.0