Add Windows version string to --version

fixes #8888
This commit is contained in:
Jean Flach 2015-04-28 12:34:33 +02:00 committed by Jean-Marcel Flach
parent f13460a2dd
commit 1c7d6895bd
1 changed files with 72 additions and 41 deletions

View File

@ -42,6 +42,9 @@
#ifdef __linux__ #ifdef __linux__
#include <sys/prctl.h> #include <sys/prctl.h>
#endif /* __linux__ */ #endif /* __linux__ */
#ifdef _WIN32
#include <VersionHelpers.h>
#endif /*_WIN32*/
using namespace icinga; using namespace icinga;
@ -488,54 +491,77 @@ static String UnameHelper(char type)
int ReleaseHelper(std::string &result) int ReleaseHelper(std::string &result)
{ {
/* You are useing *some* distribution */ /* You are useing *some* distribution */
FILE *fp = popen("lsb_release -s -d 2>&1", "r"); FILE *fp = popen("lsb_release -s -d 2>&1", "r");
std::ostringstream msgbuf; std::ostringstream msgbuf;
if (fp != NULL) { if (fp != NULL) {
char line[1024]; char line[1024];
while (fgets(line, sizeof(line), fp) != NULL) while (fgets(line, sizeof(line), fp) != NULL)
msgbuf << line; msgbuf << line;
int status = pclose(fp); int status = pclose(fp);
if (WEXITSTATUS(status) == 0) { if (WEXITSTATUS(status) == 0) {
result = msgbuf.str(); result = msgbuf.str();
boost::trim(result); boost::trim(result);
return result.length(); return result.length();
} }
} }
/* You have systemd or Ubuntu etc. */ /* You have systemd or Ubuntu etc. */
std::ifstream release("/etc/os-release"); std::ifstream release("/etc/os-release");
std::string release_line; std::string release_line;
if (release.is_open()) { if (release.is_open()) {
while (getline(release, release_line)) { while (getline(release, release_line)) {
if (release_line.find("PRETTY_NAME") != std::string::npos) { if (release_line.find("PRETTY_NAME") != std::string::npos) {
result = release_line.substr(13, release_line.length() - 14); result = release_line.substr(13, release_line.length() - 14);
return result.length(); return result.length();
} }
} }
} }
/* Centos < 7 */ /* Centos < 7 */
release.close(); release.close();
release.open("/etc/redhat-release"); release.open("/etc/redhat-release");
if (release.is_open()) { if (release.is_open()) {
getline(release, release_line); getline(release, release_line);
result = release_line; result = release_line;
return result.length(); return result.length();
} }
/* sles 11 sp3, opensuse w/e */ /* sles 11 sp3, opensuse w/e */
release.close(); release.close();
release.open("etc/SuSE-release"); release.open("etc/SuSE-release");
if (release.is_open()) { if (release.is_open()) {
getline(release, release_line); getline(release, release_line);
result = release_line; result = release_line;
return result.length(); return result.length();
} }
/* Just give up */ /* Just give up */
return 0; return 0;
}
#else
static String WindowsVersionHelper()
{
//Minimum required Version, the installer/user is in the responsibility to take care of that
String winver = "Windows Vista";
if (IsWindowsVistaSP1OrGreater())
winver = "Windows Vista SP1";
if (IsWindowsVistaSP2OrGreater())
winver = "Windows Vista SP2";
if (IsWindows7OrGreater())
winver = "Windows 7";
if (IsWindows7SP1OrGreater())
winver = "Windows 7 SP1";
if (IsWindows8OrGreater())
winver = "Windows 8";
if (IsWindows8Point1OrGreater())
winver = "Windows 8.1 or greater";
if (IsWindowsServer())
winver += " (Server)";
return winver;
} }
#endif /* _WIN32 */ #endif /* _WIN32 */
@ -567,6 +593,11 @@ void Application::DisplayInfoMessage(std::ostream& os, bool skipVersion)
<< " Operating system: " << UnameHelper('s') << "\n" << " Operating system: " << UnameHelper('s') << "\n"
<< " Operating system version: " << UnameHelper('r') << "\n" << " Operating system version: " << UnameHelper('r') << "\n"
<< " Architecture: " << UnameHelper('m') << "\n"; << " Architecture: " << UnameHelper('m') << "\n";
#else
os << "\n"
<< "System information:\n"
<< " Operating system: Windows\n"
<< " Operating system version: " << WindowsVersionHelper() << "\n";
#endif /* _WIN32 */ #endif /* _WIN32 */
#ifdef __linux__ #ifdef __linux__