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>
This commit is contained in:
Dirk Hohndel 2014-06-30 15:40:08 -07:00
parent 5149bc0df8
commit fd22e8123b
3 changed files with 43 additions and 2 deletions

View file

@ -14,6 +14,7 @@
UserSurvey::UserSurvey(QWidget *parent) : QDialog(parent),
ui(new Ui::UserSurvey)
{
QString osArch, arch;
ui->setupUi(this);
QShortcut *closeKey = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
connect(closeKey, SIGNAL(activated()), this, SLOT(close()));
@ -25,8 +26,16 @@ UserSurvey::UserSurvey(QWidget *parent) : QDialog(parent),
os = QString("ssrfVers=%1").arg(VERSION_STRING);
sysInfo.append(tr("\nOperating System: %1").arg(SubsurfaceSysInfo::prettyOsName()));
os.append(QString("&prettyOsName=%1").arg(SubsurfaceSysInfo::prettyOsName()));
sysInfo.append(tr("\nCPU Architecture: %1").arg(SubsurfaceSysInfo::cpuArchitecture()));
os.append(QString("&cpuArch=%1").arg(SubsurfaceSysInfo::cpuArchitecture()));
arch = SubsurfaceSysInfo::cpuArchitecture();
sysInfo.append(tr("\nCPU Architecture: %1").arg(arch));
os.append(QString("&appCpuArch=%1").arg(arch));
if (arch == "i386") {
osArch = SubsurfaceSysInfo::osArch();
if (!osArch.isEmpty()) {
sysInfo.append(tr("\nOS CPU Architecture %1").arg(osArch));
os.append(QString("&osCpuArch=%1").arg(osArch));
}
}
sysInfo.append(tr("\nLanguage: %1").arg(uiLanguage(NULL)));
os.append(QString("&uiLang=%1").arg(uiLanguage(NULL)));
ui->system->setPlainText(sysInfo);

View file

@ -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;
}

View file

@ -212,7 +212,9 @@ public:
static QString osKernelVersion();
static QString osVersion();
static QString prettyOsName();
#endif
static QString osArch();
};