From cd7e8372f3c83531afe5d5c2460ecb95540f9d0d Mon Sep 17 00:00:00 2001 From: Sfan5 Date: Sun, 19 Jan 2014 14:32:03 +0100 Subject: Include system info in the HTTP user agent on Windows --- src/porting.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) (limited to 'src/porting.cpp') diff --git a/src/porting.cpp b/src/porting.cpp index a080a44e5..b0a1843eb 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -23,15 +23,18 @@ with this program; if not, write to the Free Software Foundation, Inc., See comments in porting.h */ -#if defined(linux) - #include -#elif defined(__APPLE__) - #include +#if defined(__APPLE__) #include + #include "CoreFoundation/CoreFoundation.h" #elif defined(__FreeBSD__) - #include #include #include +#elif defined(_WIN32) + #include +#endif +#if !defined(_WIN32) + #include + #include #endif #include "porting.h" @@ -42,10 +45,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" #include -#ifdef __APPLE__ - #include "CoreFoundation/CoreFoundation.h" -#endif - namespace porting { @@ -284,6 +283,42 @@ bool detectMSVCBuildDir(char *c_path) return (removeStringEnd(path, ends) != ""); } +std::string get_sysinfo() +{ +#ifdef _WIN32 + OSVERSIONINFO osvi; + std::ostringstream oss; + std::string tmp; + ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&osvi); + tmp = osvi.szCSDVersion; + std::replace(tmp.begin(), tmp.end(), ' ', '_'); + + oss << "Windows/" << osvi.dwMajorVersion << "." + << osvi.dwMinorVersion; + if(osvi.szCSDVersion[0]) + oss << "-" << tmp; + oss << " "; + #ifdef _WIN64 + oss << "x86_64"; + #else + BOOL is64 = FALSE; + if(IsWow64Process(GetCurrentProcess(), &is64) && is64) + oss << "x86_64"; // 32-bit app on 64-bit OS + else + oss << "x86"; + #endif + + return oss.str(); +#else + struct utsname osinfo; + uname(&osinfo); + return std::string(osinfo.sysname) + "/" + + osinfo.release + " " + osinfo.machine; +#endif +} + void initializePaths() { #if RUN_IN_PLACE -- cgit v1.2.3