diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2014-07-07 21:27:46 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2014-07-30 19:48:41 +0200 |
commit | 7616586691cf99e63d2b7c0f1fde27791a6a8f24 (patch) | |
tree | cc99f692defb7b9c8b5247b8e40159763c86e7a1 /src/corelib | |
parent | 5d11688d02e1f56722dce809cbe7ab5c49fea590 (diff) |
Don't parse /etc/os-release every time we need to do uname(2)
This is just an optimization of the code: instead of opening and parsing
/etc/os-release every time QSysInfo::kernelType() is called on Linux, do
that only in QSysInfo::productType() and productVersion().
Change-Id: I201504934ecf7a51854cb49c790bd9d30eba644b
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/global/qglobal.cpp | 55 |
1 files changed, 16 insertions, 39 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 861010ce41..fb7bd9fa01 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2051,23 +2051,14 @@ const QSysInfo::WinVersion QSysInfo::WindowsVersion = QSysInfo::windowsVersion() #if defined(Q_OS_UNIX) # if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD) # define USE_ETC_OS_RELEASE -# endif struct QUnixOSVersion { - // from uname(2) - QString sysName; - QString sysNameLower; - QString sysRelease; - -# ifdef USE_ETC_OS_RELEASE // from /etc/os-release QString productType; // $ID QString productVersion; // $VERSION_ID QString prettyName; // $PRETTY_NAME -# endif }; -# ifdef USE_ETC_OS_RELEASE static QString unquote(const char *begin, const char *end) { if (*begin == '"') { @@ -2140,27 +2131,6 @@ static bool readEtcOsRelease(QUnixOSVersion &v) return true; } # endif // USE_ETC_OS_RELEASE - -static QUnixOSVersion detectUnixVersion() -{ - QUnixOSVersion v; - struct utsname u; - if (uname(&u) != -1) { - v.sysName = QString::fromLatin1(u.sysname); - v.sysNameLower = v.sysName.toLower(); - v.sysRelease = QString::fromLatin1(u.release); - } else { - v.sysName = QLatin1String("Detection failed"); - // leave sysNameLower & sysRelease unset - } - -# ifdef USE_ETC_OS_RELEASE - if (readEtcOsRelease(v)) - return v; -# endif - - return v; -} #endif // Q_OS_UNIX @@ -2363,9 +2333,9 @@ QString QSysInfo::kernelType() #elif defined(Q_OS_WIN) return QStringLiteral("winnt"); #elif defined(Q_OS_UNIX) - QUnixOSVersion unixOsVersion = detectUnixVersion(); - if (!unixOsVersion.sysNameLower.isEmpty()) - return unixOsVersion.sysNameLower; + struct utsname u; + if (uname(&u) == 0) + return QString::fromLatin1(u.sysname).toLower(); #endif return unknownText(); } @@ -2393,7 +2363,10 @@ QString QSysInfo::kernelVersion() return QString::number(int(osver.dwMajorVersion)) + QLatin1Char('.') + QString::number(int(osver.dwMinorVersion)) + QLatin1Char('.') + QString::number(int(osver.dwBuildNumber)); #else - return detectUnixVersion().sysRelease; + struct utsname u; + if (uname(&u) == 0) + return QString::fromLatin1(u.release); + return QString(); #endif } @@ -2463,7 +2436,8 @@ QString QSysInfo::productType() return QStringLiteral("darwin"); #elif defined(USE_ETC_OS_RELEASE) // Q_OS_UNIX - QUnixOSVersion unixOsVersion = detectUnixVersion(); + QUnixOSVersion unixOsVersion; + readEtcOsRelease(unixOsVersion); if (!unixOsVersion.productType.isEmpty()) return unixOsVersion.productType; #endif @@ -2532,7 +2506,8 @@ QString QSysInfo::productVersion() return bbVersion; } #elif defined(USE_ETC_OS_RELEASE) // Q_OS_UNIX - QUnixOSVersion unixOsVersion = detectUnixVersion(); + QUnixOSVersion unixOsVersion; + readEtcOsRelease(unixOsVersion); if (!unixOsVersion.productVersion.isEmpty()) return unixOsVersion.productVersion; #endif @@ -2605,13 +2580,15 @@ QString QSysInfo::prettyProductName() #elif defined(Q_OS_BLACKBERRY) return QLatin1String("BlackBerry ") + productVersion(); #elif defined(Q_OS_UNIX) - QUnixOSVersion unixOsVersion = detectUnixVersion(); # ifdef USE_ETC_OS_RELEASE + QUnixOSVersion unixOsVersion; + readEtcOsRelease(unixOsVersion); if (!unixOsVersion.prettyName.isEmpty()) return unixOsVersion.prettyName; # endif - if (!unixOsVersion.sysName.isEmpty()) - return unixOsVersion.sysName + QLatin1Char(' ') + unixOsVersion.sysRelease; + struct utsname u; + if (uname(&u) == 0) + return QString::fromLatin1(u.sysname) + QLatin1Char(' ') + QString::fromLatin1(u.release); #endif return unknownText(); } |