X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fenvironment.c;h=e0d1970f61279e87374354b4bc734610cd344c9d;hb=b711f7731b1861c25f673eb699df5d4000910b9f;hp=7fb293c03f6f2dc487a4ec2a845848e37ff48b2a;hpb=d91ee11d4c760699f14220d155c25550f752b9e5;p=mono.git diff --git a/mono/metadata/environment.c b/mono/metadata/environment.c index 7fb293c03f6..e0d1970f612 100644 --- a/mono/metadata/environment.c +++ b/mono/metadata/environment.c @@ -15,8 +15,11 @@ #include #include #include +#include #include +extern MonoString* ves_icall_System_Environment_GetOSVersionString (void); + #if !defined(HOST_WIN32) && defined(HAVE_SYS_UTSNAME_H) #include #endif @@ -38,26 +41,23 @@ MonoString* ves_icall_System_Environment_GetOSVersionString (void) { #ifdef HOST_WIN32 - OSVERSIONINFO verinfo; - - MONO_ARCH_SAVE_REGS; + OSVERSIONINFOEX verinfo; - verinfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); - if (GetVersionEx (&verinfo)) { - char version [64]; - /* maximum string length is 35 bytes - 3 x 10 bytes per number, 1 byte for 0, 3 x 1 byte for dots, 1 for NULL */ - sprintf (version, "%ld.%ld.%ld.0", - verinfo.dwMajorVersion, - verinfo.dwMinorVersion, - verinfo.dwBuildNumber); + verinfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); + if (GetVersionEx ((OSVERSIONINFO*)&verinfo)) { + char version [128]; + /* maximum string length is 45 bytes + 4 x 10 bytes per number, 1 byte for 0, 3 x 1 byte for dots, 1 for NULL */ + sprintf (version, "%ld.%ld.%ld.%d", + verinfo.dwMajorVersion, + verinfo.dwMinorVersion, + verinfo.dwBuildNumber, + verinfo.wServicePackMajor << 16); return mono_string_new (mono_domain_get (), version); } #elif defined(HAVE_SYS_UTSNAME_H) struct utsname name; - MONO_ARCH_SAVE_REGS; - if (uname (&name) >= 0) { return mono_string_new (mono_domain_get (), name.release); }