X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fenvironment.c;h=e0d1970f61279e87374354b4bc734610cd344c9d;hb=9965afbe2fdee75c5e17153dfd54e30fdc8ae1c8;hp=0313affe16eb997b30512d1bbb203ea011733183;hpb=1fabd87b02f8d2e359150ed7a9e92613e60383bc;p=mono.git diff --git a/mono/metadata/environment.c b/mono/metadata/environment.c index 0313affe16e..e0d1970f612 100644 --- a/mono/metadata/environment.c +++ b/mono/metadata/environment.c @@ -5,8 +5,8 @@ * Dick Porter (dick@ximian.com) * Sebastien Pouliot (sebastien@ximian.com) * - * (C) 2002 Ximian, Inc. - * (C) 2004 Novell (http://www.novell.com) + * Copyright 2002-2003 Ximian, Inc (http://www.ximian.com) + * Copyright 2004-2009 Novell, Inc (http://www.novell.com) */ #include @@ -15,9 +15,12 @@ #include #include #include +#include #include -#ifndef PLATFORM_WIN32 +extern MonoString* ves_icall_System_Environment_GetOSVersionString (void); + +#if !defined(HOST_WIN32) && defined(HAVE_SYS_UTSNAME_H) #include #endif @@ -37,37 +40,28 @@ void mono_environment_exitcode_set (gint32 value) MonoString* ves_icall_System_Environment_GetOSVersionString (void) { -#ifdef PLATFORM_WIN32 - OSVERSIONINFO verinfo; - - MONO_ARCH_SAVE_REGS; +#ifdef HOST_WIN32 + 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); } -#else +#elif defined(HAVE_SYS_UTSNAME_H) struct utsname name; - MONO_ARCH_SAVE_REGS; - - if (uname (&name) == 0) { + if (uname (&name) >= 0) { return mono_string_new (mono_domain_get (), name.release); } #endif return mono_string_new (mono_domain_get (), "0.0.0.0"); } -gint32 ves_icall_System_Environment_get_ProcessorCount(void) -{ - SYSTEM_INFO sys_info; - GetSystemInfo(&sys_info); - return sys_info.dwNumberOfProcessors; -}