diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-06-30 15:40:08 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-06-30 15:54:49 -0700 |
commit | fd22e8123b18e52610e36b21f29f3a80850d8dee (patch) | |
tree | e780a68612939ab2c05e20056dd530664723f0b1 /subsurfacesysinfo.cpp | |
parent | 5149bc0df8b8f2b813911f360eca994e323b1138 (diff) | |
download | subsurface-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.cpp | 30 |
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; +} |