(DISTFILES): Comment out a few missing files.
[mono-project.git] / mcs / class / Mono.Posix / Mono.Posix / PosixEnvironment.cs
blobc8243fafdd9dc099075a378392299dd02a0a0d08
1 //
2 // Mono.Posix/PosixEnvironment.cs
3 //
4 // Authors:
5 // Jonathan Pryor (jonpryor@vt.edu)
6 //
7 // (C) 2004 Jonathan Pryor
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System;
30 using System.Text;
31 using Mono.Posix;
33 namespace Mono.Posix {
35 public sealed /* static */ class PosixEnvironment
37 private PosixEnvironment () {}
39 public static string CurrentDirectory {
40 get {
41 return PosixDirectory.GetCurrentDirectory ();
43 set {
44 PosixDirectory.SetCurrentDirectory (value);
48 public static string MachineName {
49 get {
50 StringBuilder buf = new StringBuilder (8);
51 int r = 0;
52 Error e = (Error) 0;
53 do {
54 buf.Capacity *= 2;
55 r = Syscall.gethostname (buf);
56 } while (r == (-1) && ((e = Syscall.GetLastError()) == Error.EINVAL) ||
57 (e == Error.ENAMETOOLONG));
58 if (r == (-1))
59 PosixMarshal.ThrowExceptionForLastError ();
60 return buf.ToString ();
62 set {
63 Syscall.sethostname (value);
67 public static long GetConfigurationValue (SysConf name)
69 long r = Syscall.sysconf (name);
70 if (r == -1 && Syscall.GetLastError() == Error.EINVAL)
71 PosixMarshal.ThrowExceptionForLastError ();
72 return r;
75 public static string GetConfigurationString (ConfStr name)
77 ulong len = Syscall.confstr (name, null, 0);
78 if (len == 0)
79 return "";
80 StringBuilder buf = new StringBuilder ((int) len+1);
81 len = Syscall.confstr (name, buf, len);
82 return buf.ToString ();
85 public static void SetNiceValue (int inc)
87 int r = Syscall.nice (inc);
88 PosixMarshal.ThrowExceptionForLastErrorIf (r);
91 public static string UserName {
92 get {return PosixUser.GetCurrentUserName();}
95 public static int CreateSession ()
97 return Syscall.setsid ();
100 public static void SetProcessGroup ()
102 int r = Syscall.setpgrp ();
103 PosixMarshal.ThrowExceptionForLastErrorIf (r);
106 public static int GetProcessGroup ()
108 return Syscall.getpgrp ();
111 public static uint[] GetSupplementaryGroups ()
113 int ngroups = Syscall.getgroups (0, new uint[]{});
114 if (ngroups == -1)
115 PosixMarshal.ThrowExceptionForLastError ();
116 uint[] groups = new uint[ngroups];
117 int r = Syscall.getgroups (groups);
118 PosixMarshal.ThrowExceptionForLastErrorIf (r);
119 return groups;
122 public static void SetSupplementaryGroups (uint[] list)
124 int r = Syscall.setgroups (list);
125 PosixMarshal.ThrowExceptionForLastErrorIf (r);
130 // vim: noexpandtab