]> granicus.if.org Git - icinga2/commitdiff
Add Windows version string to --version
authorJean Flach <jean-marcel.flach@netways.de>
Tue, 28 Apr 2015 10:34:33 +0000 (12:34 +0200)
committerJean-Marcel Flach <jean-marcel.flach@netways.de>
Tue, 28 Apr 2015 10:48:41 +0000 (12:48 +0200)
fixes #8888

lib/base/application.cpp

index 2aee26ee99328700b9be48ab7e22f2ebb09c0e54..81c8efaa8b0d08b789676bfd6bac787ebf0f744d 100644 (file)
@@ -42,6 +42,9 @@
 #ifdef __linux__
 #include <sys/prctl.h>
 #endif /* __linux__ */
+#ifdef _WIN32
+#include <VersionHelpers.h>
+#endif /*_WIN32*/
 
 using namespace icinga;
 
@@ -488,54 +491,77 @@ static String UnameHelper(char type)
 
 int ReleaseHelper(std::string &result)
 {
-    /* You are useing *some* distribution */
-    FILE *fp = popen("lsb_release -s -d 2>&1", "r");
-    std::ostringstream msgbuf;
-
-    if (fp != NULL) {
-        char line[1024];
-        while (fgets(line, sizeof(line), fp) != NULL)
-            msgbuf << line;
-        int status = pclose(fp);
-        if (WEXITSTATUS(status) == 0) { 
-            result = msgbuf.str();
+       /* You are useing *some* distribution */
+       FILE *fp = popen("lsb_release -s -d 2>&1", "r");
+       std::ostringstream msgbuf;
+
+       if (fp != NULL) {
+               char line[1024];
+               while (fgets(line, sizeof(line), fp) != NULL)
+                       msgbuf << line;
+               int status = pclose(fp);
+               if (WEXITSTATUS(status) == 0) { 
+                       result = msgbuf.str();
                        boost::trim(result);
-            return result.length();
-        }    
-    }    
-
-    /* You have systemd or Ubuntu etc. */
-    std::ifstream release("/etc/os-release");
-    std::string release_line;
-    if (release.is_open()) {
-        while (getline(release, release_line)) {
-            if (release_line.find("PRETTY_NAME") != std::string::npos) {
-                result = release_line.substr(13, release_line.length() - 14); 
-                return result.length();
-            }    
-        }    
-    }    
-
-    /* Centos < 7 */
-    release.close();
-    release.open("/etc/redhat-release");
-    if (release.is_open()) {
-        getline(release, release_line);
+                       return result.length();
+               }
+       }
+
+       /* You have systemd or Ubuntu etc. */
+       std::ifstream release("/etc/os-release");
+       std::string release_line;
+       if (release.is_open()) {
+               while (getline(release, release_line)) {
+                       if (release_line.find("PRETTY_NAME") != std::string::npos) {
+                               result = release_line.substr(13, release_line.length() - 14); 
+                               return result.length();
+                       }
+               }
+       }
+
+       /* Centos < 7 */
+       release.close();
+       release.open("/etc/redhat-release");
+       if (release.is_open()) {
+               getline(release, release_line);
                result = release_line;
-        return result.length();
-    }    
+               return result.length();
+       }
 
-    /* sles 11 sp3, opensuse w/e */
-    release.close();
-    release.open("etc/SuSE-release");
-    if (release.is_open()) {
-        getline(release, release_line);
-        result = release_line;
-        return result.length();
-    }    
+       /* sles 11 sp3, opensuse w/e */
+       release.close();
+       release.open("etc/SuSE-release");
+       if (release.is_open()) {
+               getline(release, release_line);
+               result = release_line;
+               return result.length();
+       }
 
-    /* Just give up */
-    return 0;
+       /* Just give up */
+       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 */
@@ -567,6 +593,11 @@ void Application::DisplayInfoMessage(std::ostream& os, bool skipVersion)
           << "  Operating system: " << UnameHelper('s') << "\n"
           << "  Operating system version: " << UnameHelper('r') << "\n"
           << "  Architecture: " << UnameHelper('m') << "\n";
+#else
+       os << "\n"
+          << "System information:\n"
+          << "  Operating system: Windows\n"
+          << "  Operating system version: " << WindowsVersionHelper() << "\n";
 #endif /* _WIN32 */
 
 #ifdef __linux__