*/
#include "socket.h" // for select()
-#include "porting.h" // for sleep_ms()
+#include "porting.h" // for sleep_ms(), get_sysinfo()
#include "httpfetch.h"
#include <iostream>
#include <sstream>
#include <list>
#include <map>
#include <errno.h>
-#ifndef _WIN32
-#include <sys/utsname.h>
-#endif
#include "jthread/jevent.h"
#include "config.h"
#include "exceptions.h"
timeout = g_settings->getS32("curl_timeout");
connect_timeout = timeout * 5;
- useragent = std::string("Minetest/") + minetest_version_hash + " ";
-#ifdef _WIN32
- useragent += "(Windows)";
-#else
- struct utsname osinfo;
- uname(&osinfo);
- useragent += std::string("(") + osinfo.sysname + "/"
- + osinfo.release + " " + osinfo.machine + ")";
-#endif
+ useragent = std::string("Minetest/") + minetest_version_hash + " (" + porting::get_sysinfo() + ")";
}
See comments in porting.h
*/
-#if defined(linux)
- #include <unistd.h>
-#elif defined(__APPLE__)
- #include <unistd.h>
+#if defined(__APPLE__)
#include <mach-o/dyld.h>
+ #include "CoreFoundation/CoreFoundation.h"
#elif defined(__FreeBSD__)
- #include <unistd.h>
#include <sys/types.h>
#include <sys/sysctl.h>
+#elif defined(_WIN32)
+ #include <algorithm>
+#endif
+#if !defined(_WIN32)
+ #include <unistd.h>
+ #include <sys/utsname.h>
#endif
#include "porting.h"
#include "util/string.h"
#include <list>
-#ifdef __APPLE__
- #include "CoreFoundation/CoreFoundation.h"
-#endif
-
namespace porting
{
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
*/
bool threadSetPriority(threadid_t tid, int prio);
+/*
+ Return system information
+ e.g. "Linux/3.12.7 x86_64"
+*/
+std::string get_sysinfo();
+
/*
Resolution is 10-20ms.
Remember to check for overflows.