2004-05-27 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mono / metadata / environment.c
1 /*
2  * environment.c: System.Environment support internal calls
3  *
4  * Authors:
5  *      Dick Porter (dick@ximian.com)
6  *      Sebastien Pouliot (sebastien@ximian.com)
7  *
8  * (C) 2002 Ximian, Inc.
9  * (C) 2004 Novell (http://www.novell.com)
10  */
11
12 #include <config.h>
13 #include <glib.h>
14
15 #include <mono/metadata/appdomain.h>
16 #include <mono/metadata/environment.h>
17 #include <mono/metadata/exception.h>
18
19 #ifndef PLATFORM_WIN32
20 #include <sys/utsname.h>
21 #endif
22
23 static gint32 exitcode=0;
24
25 gint32 mono_environment_exitcode_get (void)
26 {
27         return(exitcode);
28 }
29
30 void mono_environment_exitcode_set (gint32 value)
31 {
32         exitcode=value;
33 }
34
35 /* note: we better manipulate the string in managed code (easier and safer) */
36 MonoString*
37 ves_icall_System_Environment_GetOSVersionString (void)
38 {
39 #ifdef PLATFORM_WIN32
40         OSVERSIONINFO verinfo;
41
42         MONO_ARCH_SAVE_REGS;
43
44         verinfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
45         if (GetVersionEx (&verinfo)) {
46                 char version [64];
47                 /* maximum string length is 35 bytes 
48                    3 x 10 bytes per number, 1 byte for 0, 3 x 1 byte for dots, 1 for NULL */
49                 sprintf (version, "%ld.%ld.%ld.0", 
50                         verinfo.dwMajorVersion,
51                         verinfo.dwMinorVersion,
52                         verinfo.dwBuildNumber);
53                 return mono_string_new (mono_domain_get (), version);
54         }
55 #else
56         struct utsname name;
57
58         MONO_ARCH_SAVE_REGS;
59
60         if (uname (&name) == 0) {
61                 return mono_string_new (mono_domain_get (), name.release);
62         }
63 #endif
64         return mono_string_new (mono_domain_get (), "0.0.0.0");
65 }