X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fenvironment.c;h=e0d1970f61279e87374354b4bc734610cd344c9d;hb=1cab7b05353bccb8d7ef160448ffcde827e99386;hp=f8406bc998a0fc26e8daf5aba39ef6f9643a0ab6;hpb=9b5c149aec6d102a015c353b28fee08a1bae4009;p=mono.git diff --git a/mono/metadata/environment.c b/mono/metadata/environment.c index f8406bc998a..e0d1970f612 100644 --- a/mono/metadata/environment.c +++ b/mono/metadata/environment.c @@ -1,16 +1,28 @@ /* * environment.c: System.Environment support internal calls * - * Author: + * Authors: * Dick Porter (dick@ximian.com) + * Sebastien Pouliot (sebastien@ximian.com) * - * (C) 2002 Ximian, Inc. + * Copyright 2002-2003 Ximian, Inc (http://www.ximian.com) + * Copyright 2004-2009 Novell, Inc (http://www.novell.com) */ #include #include +#include #include +#include +#include +#include + +extern MonoString* ves_icall_System_Environment_GetOSVersionString (void); + +#if !defined(HOST_WIN32) && defined(HAVE_SYS_UTSNAME_H) +#include +#endif static gint32 exitcode=0; @@ -23,3 +35,33 @@ void mono_environment_exitcode_set (gint32 value) { exitcode=value; } + +/* note: we better manipulate the string in managed code (easier and safer) */ +MonoString* +ves_icall_System_Environment_GetOSVersionString (void) +{ +#ifdef HOST_WIN32 + OSVERSIONINFOEX verinfo; + + 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; + + 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"); +} +