@@ -156,10 +156,14 @@ static size_t pageSize = 4096; static size_t numberOfCPUs = 1; static OFString *operatingSystemName = nil; static OFString *operatingSystemVersion = nil; + +#ifdef OF_WINDOWS +static const char *(*wine_get_version)(void); +#endif static void initOperatingSystemName(void) { #if defined(OF_IOS) @@ -389,14 +393,20 @@ */ SSETest(); #endif #if defined(OF_WINDOWS) + HANDLE module; + SYSTEM_INFO si; GetSystemInfo(&si); pageSize = si.dwPageSize; numberOfCPUs = si.dwNumberOfProcessors; + + if ((module = GetModuleHandle("ntdll.dll")) != NULL) + wine_get_version = (const char *(*)(void)) + GetProcAddress(module, "wine_get_version"); #elif defined(OF_QNX) if ((tmp = sysconf(_SC_PAGESIZE)) > 0) pageSize = tmp; numberOfCPUs = _syspage_ptr->num_cpu; #else @@ -456,10 +466,21 @@ static OFOnceControl onceControl = OFOnceControlInitValue; OFOnce(&onceControl, initOperatingSystemVersion); return operatingSystemVersion; } + +#ifdef OF_WINDOWS ++ (OFString *)wineVersion +{ + if (wine_get_version != NULL) + return [OFString stringWithCString: wine_get_version() + encoding: [OFLocale encoding]]; + + return nil; +} +#endif + (OFIRI *)userDataIRI { #ifdef OF_HAVE_FILES # if defined(OF_MACOS) || defined(OF_IOS)