summaryrefslogtreecommitdiffstats
path: root/subsurfacesysinfo.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2014-06-30 15:40:08 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-06-30 15:54:49 -0700
commitfd22e8123b18e52610e36b21f29f3a80850d8dee (patch)
treee780a68612939ab2c05e20056dd530664723f0b1 /subsurfacesysinfo.cpp
parent5149bc0df8b8f2b813911f360eca994e323b1138 (diff)
downloadsubsurface-fd22e8123b18e52610e36b21f29f3a80850d8dee.tar.gz
User survey: detect the machine the app is running on
We build 32bit Windows binaries - but we really want to know if the OS is x86_64 or i386. This little hack should give us that information. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'subsurfacesysinfo.cpp')
-rw-r--r--subsurfacesysinfo.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/subsurfacesysinfo.cpp b/subsurfacesysinfo.cpp
index ca3b161a3..75ce38be7 100644
--- a/subsurfacesysinfo.cpp
+++ b/subsurfacesysinfo.cpp
@@ -442,3 +442,33 @@ QString SubsurfaceSysInfo::prettyOsName()
return unknownText();
#endif
}
+
+// detect if the OS we are running on is 64 or 32bit
+// we only care when building on Intel for 32bit
+QString SubsurfaceSysInfo::osArch()
+{
+ QString res = "";
+#if defined(Q_PROCESSOR_X86_32)
+#if defined(Q_OS_UNIX)
+ struct utsname u;
+ if (uname(&u) != -1) {
+ res = u.machine;
+ }
+#elif defined(Q_OS_WIN)
+
+ /* this code is from
+ * http://mark.koli.ch/reliably-checking-os-bitness-32-or-64-bit-on-windows-with-a-tiny-c-app
+ * there is no license given, but 5 lines of code should be fine to reuse unless explicitly forbidden */
+ typedef BOOL (WINAPI *IW64PFP)(HANDLE, BOOL *);
+ BOOL os64 = FALSE;
+ IW64PFP IW64P = (IW64PFP)GetProcAddress(
+ GetModuleHandle((LPCSTR)"kernel32"), "IsWow64Process");
+
+ if(IW64P != NULL){
+ IW64P(GetCurrentProcess(), &os64);
+ }
+ res = os64 ? "x86_64" : "i386";
+#endif
+#endif
+ return res;
+}