Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/corlib/Linux/Linux.cs')
-rw-r--r--mcs/class/corlib/Linux/Linux.cs484
1 files changed, 484 insertions, 0 deletions
diff --git a/mcs/class/corlib/Linux/Linux.cs b/mcs/class/corlib/Linux/Linux.cs
new file mode 100644
index 00000000000..86a1cfc475a
--- /dev/null
+++ b/mcs/class/corlib/Linux/Linux.cs
@@ -0,0 +1,484 @@
+/*---------------------------------------------------------------------
+
+ XX X XXX
+ XX XX
+ XXX XX XXX XXXXX XX
+ XX XXX XX XX XX
+ XX XX XX XX XXXXX XX
+ XX XX XX XX XX XX X XX
+ XXXX XX XX XXX XXXXXXX XXXX
+ XX
+ XXXXX
+
+Copyright (c) 2001 Intel Corporation. All Rights Reserved.
+
+CREATED: August 22, 2001
+OWNER: Scott D Smith, Joel Marcey
+VERSION: 1.0
+---------------------------------------------------------------------*/
+
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+namespace System.PAL
+{
+ /// <summary>
+ /// Class that implements IOperatingSystem, providing the requested functionality through calls into APIs available in Linux
+ /// </summary>
+ internal class OpSys
+ {
+ private Hashtable _environment = null;
+
+ //----------------------------------
+ // Class Constants
+ //----------------------------------
+ private const int EOF = -1; // TODO: Linux: Is this true?
+
+
+ // For StdInputStream and StdOutputStream
+ private IntPtr Stdin;
+ private IntPtr Stdout;
+ private IntPtr Stderr;
+
+ //----------------------------------
+ // Class Fields
+ //----------------------------------
+
+ //----------------------------------
+ // Class Constructor
+ //----------------------------------
+ public OpSys()
+ {
+ Stdin=GetStdHandle(0);
+ Stdout=GetStdHandle(1);
+ Stderr=GetStdHandle(2);
+ }
+
+
+ //-------------------------------------------------
+ // Environment Services
+ //-------------------------------------------------
+
+ public string NewLineSequence
+ {
+ get
+ {
+ return "\n";
+ }
+ }
+
+ public char DirectorySeparator
+ {
+ get
+ {
+ return '/';
+ }
+ }
+
+ public char AltDirectorySeparator
+ {
+ get
+ {
+ return '\\';
+ }
+ }
+
+ public char VolumeSeparator
+ {
+ get
+ {
+ return '/';
+ }
+ }
+
+ public char PathSeparator
+ {
+ get
+ {
+ return ':';
+ }
+ }
+
+ public char[] InvalidPathChars
+ {
+ get
+ {
+ return new char[] { '\0' };
+ }
+ }
+
+ public char[] DirVolSeparatorChars
+ {
+ get
+ {
+ return new char[] { this.DirectorySeparator, this.AltDirectorySeparator, this.VolumeSeparator};
+ }
+ }
+ public char ExtensionCharacter
+ {
+ get
+ {
+ return '.';
+ }
+ }
+
+ public string GetEnvironmentVariable(string eVar)
+ {
+ return EnvironmentVariables[eVar].ToString();
+ }
+
+ public IDictionary EnvironmentVariables
+ {
+ get
+ {
+ if (_environment == null) {
+ IntPtr pp = _getEnviron(); // pointer to an array of char*
+ _environment = new Hashtable();
+
+ if (pp != IntPtr.Zero) {
+ IntPtr p;
+ bool done = false;
+ char[] delimiter = { '=' };
+
+ while (!done)
+ {
+ p = Marshal.ReadIntPtr(pp);
+ if (p != IntPtr.Zero)
+ {
+ string str = Marshal.PtrToStringAuto(p);
+ string[] ar = str.Split(delimiter, 2);
+ switch(ar.Length)
+ {
+ case 1:
+ _environment.Add(ar[0], "");
+ break;
+ case 2:
+ _environment.Add(ar[0], ar[1]);
+ break;
+ default:
+ //System.Diagnostics/.Debug.Assert(false); // this shouldn't happen
+ break;
+ }
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ }
+ }
+ return _environment;
+ }
+ }
+
+ public string CommandLine
+ {
+ get
+ {
+ string path = Path.Combine(Path.Combine("/proc", _getPid().ToString()), "cmdline");
+ StreamReader stream = File.OpenText(path);
+ string res = stream.ReadToEnd();
+ stream.Close();
+ return res;
+ }
+ }
+
+ public string MachineName
+ {
+ get
+ {
+ return GetEnvironmentVariable("HOSTNAME");
+ }
+ }
+
+ public OperatingSystem OSVersion
+ {
+ get
+ {
+ return null;
+ }
+ }
+
+ // System.Path services
+
+ public string ChangeExtension(string path, string extension)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:ChangeExtension(System.String, System.String): Stub Method");
+ return null;
+ }
+
+ public string GetExtension(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetExtension(System.String): Stub Method");
+ return null;
+ }
+
+ public string GetFileName(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetFileName(System.String): Stub Method");
+ return null;
+ }
+
+ public string GetFileNameWithoutExtension(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetFileNameWithoutExtension(System.String): Stub Method");
+ return null;
+ }
+
+ public string GetFullPath(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetFullPath(System.String): Stub Method");
+ return null;
+ }
+
+ public string GetPathRoot(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetPathRoot(System.String): Stub Method");
+ return null;
+
+ }
+
+ public string GetTempFileName()
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetTempFileName(): Stub Method");
+ return null;
+ }
+
+ public string GetTempPath()
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetTempPath(): Stub Method");
+ return null;
+ }
+
+ public bool HasExtension(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:HasExtension(System.String): Stub Method");
+ return false;
+ }
+
+ public bool IsPathRooted(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:IsPathRooted(System.String): Stub Method");
+ return false;
+ }
+
+
+
+ // System.Directory services
+
+ public void DeleteDirectory(string path, bool recursive)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:DeleteDirectory(System.String, System.Boolean): Stub Method");
+ }
+
+ public bool ExistsDirectory(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:ExistsDirectory(System.String): Stub Method");
+ return false;
+ }
+
+ public DateTime GetCreationTimeDirectory(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetCreationTimeDirectory(System.String): Stub Method");
+ return new DateTime(0);
+ }
+
+ [System.Runtime.CompilerServices.MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public extern string GetCurrentDirectory();
+
+ public string[] GetDirectories(string path, string searchPattern)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetDirectories(System.String,System.String): Stub Method");
+ return null;
+ }
+
+ public string[] GetFiles(string path, string searchPattern)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetFiles(System.String, System.String): Stub Method");
+ return null;
+ }
+
+ public string[] GetFileSystemEntries(string path, string searchPattern)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetFileSystemEntries(System.String, System.String): Stub Method");
+ return null;
+ }
+
+ public DateTime GetLastAccessTimeDirectory(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetLastAccessTimeDirectory(System.String): Stub Method");
+ return new DateTime(0);
+ }
+
+ public DateTime GetLastWriteTimeDirectory(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:GetLastWriteTimeDirectory(System.String): Stub Method");
+ return new DateTime(0);
+ }
+
+ public void MoveDirectory(string sourceDirName, string destDirName)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:MoveDirectory(System.String, System.String): Stub Method");
+ }
+
+ public void SetCreationTimeDirectory(string path, DateTime creationTime)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:SetCreationTimeDirectory(System.String, System.DateTime): Stub Method");
+ }
+
+ public void SetCurrentDirectory(string path)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:SetCurrentDirectory(System.String): Stub Method");
+ }
+
+ public void SetLastAccessTimeDirectory(string path, DateTime lastAccessTime)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:SetLastAccessTimeDirectory(System.String, System.DateTime): Stub Method");
+ }
+
+ public void SetLastWriteTimeDirectory(string path, DateTime lastWriteTime)
+ {
+ //System.Diagnostics/.Debug.WriteLine("Linux:SetLastWriteTimeDirectory(System.String, System.DateTime): Stub Method");
+ }
+
+ //-----------------------------------
+ // I/O Services
+ //-----------------------------------
+
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ private extern IntPtr GetStdHandle(int fd);
+
+ public IntPtr StdinHandle {
+ get {
+ return(Stdin);
+ }
+ }
+
+ public IntPtr StdoutHandle {
+ get {
+ return(Stdout);
+ }
+ }
+
+ public IntPtr StderrHandle {
+ get {
+ return(Stderr);
+ }
+ }
+
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public extern void DeleteFile(string path);
+
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public extern bool ExistsFile(string path);
+
+ /* The long time parameters in GetFileTime and
+ * SetFileTime correspond to Windows file times (ticks
+ * from DateTime(1/1/1601 00:00 GMT))
+ */
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ private extern static bool GetFileTime(IntPtr handle, out long creat, out long lastaccess, out long lastwrite);
+
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ private extern static bool SetFileTime(IntPtr handle, long creat, long lastaccess, long lastwrite);
+
+ public DateTime GetCreationTimeFile(string path)
+ {
+ long creat, lastaccess, lastwrite;
+ bool ret;
+ FileStream s = new FileStream(path, FileMode.Open, FileAccess.Read);
+
+ ret=GetFileTime(s.Handle, out creat, out lastaccess, out lastwrite);
+ s.Close();
+
+ return DateTime.FromFileTime(creat);
+ }
+
+ public DateTime GetLastAccessTimeFile(string path)
+ {
+ long creat, lastaccess, lastwrite;
+ bool ret;
+ FileStream s = new FileStream(path, FileMode.Open, FileAccess.Read);
+
+ ret=GetFileTime(s.Handle, out creat, out lastaccess, out lastwrite);
+ s.Close();
+
+ return DateTime.FromFileTime(lastaccess);
+ }
+
+ public DateTime GetLastWriteTimeFile(string path)
+ {
+ long creat, lastaccess, lastwrite;
+ bool ret;
+ FileStream s = new FileStream(path, FileMode.Open, FileAccess.Read);
+
+ ret=GetFileTime(s.Handle, out creat, out lastaccess, out lastwrite);
+ s.Close();
+
+ return DateTime.FromFileTime(lastwrite);
+ }
+
+ public void SetCreationTimeFile(string path, DateTime creationTime)
+ {
+ long creat, lastaccess, lastwrite;
+ bool ret;
+ FileStream s = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
+
+ // Get the existing times first
+ ret=GetFileTime(s.Handle, out creat, out lastaccess, out lastwrite);
+
+ creat=creationTime.ToFileTime();
+
+ ret=SetFileTime(s.Handle, creat, lastaccess, lastwrite);
+ s.Close();
+ }
+
+ public void SetLastAccessTimeFile(string path, DateTime lastAccessTime)
+ {
+ long creat, lastaccess, lastwrite;
+ bool ret;
+ FileStream s = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
+
+ // Get the existing times first
+ ret=GetFileTime(s.Handle, out creat, out lastaccess, out lastwrite);
+
+ lastaccess=lastAccessTime.ToFileTime();
+
+ ret=SetFileTime(s.Handle, creat, lastaccess, lastwrite);
+ s.Close();
+ }
+
+ public void SetLastWriteTimeFile(string path, DateTime lastWriteTime)
+ {
+ long creat, lastaccess, lastwrite;
+ bool ret;
+ FileStream s = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
+
+ // Get the existing times first
+ ret=GetFileTime(s.Handle, out creat, out lastaccess, out lastwrite);
+
+ lastwrite=lastWriteTime.ToFileTime();
+
+ ret=SetFileTime(s.Handle, creat, lastaccess, lastwrite);
+ s.Close();
+ }
+
+
+ public long FileLength(string path)
+ {
+ return 0;
+ }
+
+ // Private implementation details
+ [DllImport("monowrapper", EntryPoint="mono_wrapper_environ", CharSet=CharSet.Ansi)]
+ private unsafe static extern IntPtr _getEnviron();
+
+ [DllImport("libc", EntryPoint="getpid")]
+ private unsafe static extern int _getPid();
+ }
+}