std::string CSysInfo::GetOsPrettyNameWithVersion(void) { static std::string osNameVer; if (!osNameVer.empty()) return osNameVer; #if defined(TARGET_FREEBSD) || defined(TARGET_DARWIN_IOS) || defined(TARGET_DARWIN_OSX) osNameVer = GetOsName() + " " + GetOsVersion(); #elif defined(TARGET_ANDROID) osNameVer = GetOsName() + " " + GetOsVersion() + " API level " + StringUtils::Format("%d", CJNIBuild::SDK_INT); #elif defined(TARGET_LINUX) osNameVer = getValueFromOs_release("PRETTY_NAME"); if (osNameVer.empty()) { osNameVer = getValueFromLsb_release(lsb_rel_description); std::string osName(GetOsName(true)); if (!osName.empty() && osNameVer.find(osName) == std::string::npos) osNameVer = osName + osNameVer; if (osNameVer.empty()) osNameVer = "Unknown Linux Distribution"; } if (osNameVer.find(GetOsVersion()) == std::string::npos) osNameVer += " " + GetOsVersion(); #endif // defined(TARGET_LINUX) if (osNameVer.empty()) osNameVer = "Unknown OS Unknown version"; return osNameVer; }
std::string CSysInfo::GetOsName(bool emptyIfUnknown /* = false*/) { static std::string osName; if (osName.empty()) { #if defined(TARGET_FREEBSD) osName = GetKernelName(true); // FIXME: for FreeBSD OS name is a kernel name #elif defined(TARGET_DARWIN_TVOS) osName = "TVOS"; #elif defined(TARGET_DARWIN_IOS) osName = "iOS"; #elif defined(TARGET_DARWIN_OSX) osName = "OSX"; #elif defined (TARGET_ANDROID) osName = "Android"; #elif defined(TARGET_LINUX) osName = getValueFromOs_release("NAME"); if (osName.empty()) osName = getValueFromLsb_release(lsb_rel_distributor); if (osName.empty()) osName = getValueFromOs_release("ID"); #endif // defined(TARGET_LINUX) if (osName.empty()) osName = "Unknown OS"; } if (emptyIfUnknown && osName == "Unknown OS") return ""; return osName; }
std::string CSysInfo::GetOsVersion(void) { static std::string osVersion; if (!osVersion.empty()) return osVersion; #if defined(TARGET_FREEBSD) osVersion = GetKernelVersion(); // FIXME: for Win32 and FreeBSD OS version is a kernel version #elif defined(TARGET_DARWIN_IOS) osVersion = CDarwinUtils::GetIOSVersionString(); #elif defined(TARGET_DARWIN_OSX) osVersion = CDarwinUtils::GetOSXVersionString(); #elif defined(TARGET_ANDROID) char versionCStr[PROP_VALUE_MAX]; int propLen = __system_property_get("ro.build.version.release", versionCStr); osVersion.assign(versionCStr, (propLen > 0 && propLen <= PROP_VALUE_MAX) ? propLen : 0); if (osVersion.empty() || std::string("0123456789").find(versionCStr[0]) == std::string::npos) osVersion.clear(); // can't correctly detect Android version else { size_t pointPos = osVersion.find('.'); if (pointPos == std::string::npos) osVersion += ".0.0"; else if (osVersion.find('.', pointPos + 1) == std::string::npos) osVersion += ".0"; } #elif defined(TARGET_LINUX) osVersion = getValueFromOs_release("VERSION_ID"); if (osVersion.empty()) osVersion = getValueFromLsb_release(lsb_rel_release); #endif // defined(TARGET_LINUX) if (osVersion.empty()) osVersion = "0.0"; return osVersion; }
std::string CSysInfo::GetOsPrettyNameWithVersion(void) { static std::string osNameVer; if (!osNameVer.empty()) return osNameVer; #if defined (TARGET_WINDOWS) OSVERSIONINFOEXW osvi = {}; osNameVer = "Windows "; if (sysGetVersionExWByRef(osvi)) { switch (GetWindowsVersion()) { case WindowsVersionVista: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("Vista"); else osNameVer.append("Server 2008"); break; case WindowsVersionWin7: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("7"); else osNameVer.append("Server 2008 R2"); break; case WindowsVersionWin8: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("8"); else osNameVer.append("Server 2012"); break; case WindowsVersionWin8_1: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("8.1"); else osNameVer.append("Server 2012 R2"); break; case WindowsVersionFuture: osNameVer.append("Unknown Future Version"); break; default: osNameVer.append("Unknown version"); break; } // Append Service Pack version if any if (osvi.wServicePackMajor > 0 || osvi.wServicePackMinor > 0) { osNameVer.append(StringUtils::Format(" SP%d", osvi.wServicePackMajor)); if (osvi.wServicePackMinor > 0) { osNameVer.append(StringUtils::Format(".%d", osvi.wServicePackMinor)); } } } else osNameVer.append(" unknown"); #elif defined(TARGET_FREEBSD) || defined(TARGET_DARWIN_IOS) || defined(TARGET_DARWIN_OSX) osNameVer = GetOsName() + " " + GetOsVersion(); #elif defined(TARGET_ANDROID) osNameVer = GetOsName() + " " + GetOsVersion() + " API level " + StringUtils::Format("%d", CJNIBuild::SDK_INT); #elif defined(TARGET_LINUX) osNameVer = getValueFromOs_release("PRETTY_NAME"); if (osNameVer.empty()) { osNameVer = getValueFromLsb_release(lsb_rel_description); std::string osName(GetOsName(true)); if (!osName.empty() && osNameVer.find(osName) == std::string::npos) osNameVer = osName + osNameVer; if (osNameVer.empty()) osNameVer = "Unknown Linux Distribution"; } if (osNameVer.find(GetOsVersion()) == std::string::npos) osNameVer += " " + GetOsVersion(); #endif // defined(TARGET_LINUX) if (osNameVer.empty()) osNameVer = "Unknown OS Unknown version"; return osNameVer; }