Author: miguel
Date: 2006-11-26 23:21:10 -0500 (Sun, 26 Nov 2006)
New Revision: 68493

Added:
   trunk/mcs/class/corlib/System.IO/DriveInfo.cs
   trunk/mcs/class/corlib/System.IO/DriveType.cs
Modified:
   trunk/mcs/class/corlib/corlib.dll.sources
Log:
2006-11-26  Miguel de Icaza  <[EMAIL PROTECTED]>

        * DriveInfo.cs, DriveType.cs: Add a couple of classes for
        CreativeDocs.Net.  

        Thanks MoMA!  http://www.mono-project.com/Moma



Added: trunk/mcs/class/corlib/System.IO/DriveInfo.cs
===================================================================
--- trunk/mcs/class/corlib/System.IO/DriveInfo.cs       2006-11-27 03:41:18 UTC 
(rev 68492)
+++ trunk/mcs/class/corlib/System.IO/DriveInfo.cs       2006-11-27 04:21:10 UTC 
(rev 68493)
@@ -0,0 +1,275 @@
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+using System;
+using System.Collections;
+using System.Text;
+using System.Runtime.Serialization;
+using System.Runtime.InteropServices;
+
+namespace System.IO {
+       [SerializableAttribute] 
+       [ComVisibleAttribute(true)] 
+       public sealed class DriveInfo : ISerializable {
+               _DriveType _drive_type;
+               DriveType drive_type;
+               string drive_format;
+               string path;
+
+               DriveInfo (_DriveType _drive_type, string path, string fstype)
+               {
+                       this._drive_type = _drive_type;
+                       this.drive_format = fstype;
+                       this.path = path;
+
+                       this.drive_type = ToDriveType (_drive_type, fstype);
+               }
+
+               public DriveInfo (string driveName)
+               {
+                       DriveInfo [] drives = GetDrives ();
+
+                       foreach (DriveInfo d in drives){
+                               if (d.path == driveName){
+                                       this.path = d.path;
+                                       this.drive_type = d.drive_type;
+                                       this.drive_format = d.drive_format;
+                                       this.path = d.path;
+                                       this._drive_type = d._drive_type;
+                                       return;
+                               }
+                       }
+                       throw new ArgumentException ("The drive name does not 
exist", "driveName");
+               }
+               
+               enum _DriveType {
+                       GenericUnix,
+                       Linux,
+                       Windows,
+               }
+               
+               [MonoTODO("Always returns infinite")]
+               public long AvailableFreeSpace {
+                       get {
+                               if (DriveType == DriveType.CDRom || DriveType 
== DriveType.Ram || DriveType == DriveType.Unknown)
+                                       return 0;
+                               return Int64.MaxValue;
+                       }
+               }
+
+               [MonoTODO("Always returns infinite")]
+               public long TotalFreeSpace {
+                       get {
+                               if (DriveType == DriveType.CDRom || DriveType 
== DriveType.Ram || DriveType == DriveType.Unknown)
+                                       return 0;
+                               return Int64.MaxValue;
+                       }
+               }
+
+               [MonoTODO("Always returns infinite")]
+               public long TotalSize {
+                       get {
+                               return Int64.MaxValue;
+                       }
+               }
+
+               [MonoTODO ("Currently only works on Mono/Unix")]
+               public string VolumeLabel {
+                       get {
+                               if (_drive_type != _DriveType.Windows)
+                                       return path;
+                               else
+                                       return path;
+                       }
+               }
+               
+               public string DriveFormat {
+                       get {
+                               return drive_format;
+                       }
+               }
+
+               static DriveType ToDriveType (_DriveType drive_type, string 
drive_format)
+               {
+                       if (drive_type == _DriveType.Linux){
+                               switch (drive_format){
+                               case "tmpfs":
+                               case "ramfs":
+                                       return DriveType.Ram;
+                               case "iso9660":
+                                       return DriveType.CDRom;
+                               case "ext2":
+                               case "ext3":
+                               case "sysv":
+                               case "reiserfs":
+                               case "ufs":
+                               case "vfat":
+                               case "udf":
+                               case "hfs":
+                               case "hpfs":
+                               case "qnx4":
+                                       return DriveType.Fixed;
+                               case "smbfs":
+                               case "fuse":
+                               case "nfs":
+                               case "nfs4":
+                               case "cifs":
+                               case "ncpfs":
+                               case "coda":
+                               case "afs":
+                                       return DriveType.Network;
+                               case "proc":
+                               case "sysfs":
+                               case "debugfs":
+                               case "devpts":
+                               case "securityfs":
+                                       return DriveType.Ram;
+                               default:
+                                       return DriveType.Unknown;
+                               }
+                       } else {
+                               return DriveType.Fixed;
+                       }
+               }
+               
+               public DriveType DriveType {
+                       get {
+                               return drive_type;
+                       }
+               }
+
+               public string Name {
+                       get {
+                               return path;
+                       }
+               }
+
+               public DirectoryInfo RootDirectory {
+                       get {
+                               return new DirectoryInfo (path);
+                       }
+               }
+
+               [MonoTODO("It always returns true")]
+               public bool IsReady {
+                       get {
+                               if (_drive_type != _DriveType.Windows)
+                                       return true;
+
+                               // Do something for Windows here.
+                               return true;
+                       }
+               }
+               
+               static StreamReader TryOpen (string name)
+               {
+                       if (File.Exists (name))
+                               return new StreamReader (name, Encoding.ASCII);
+                       return null;
+               }
+
+               static DriveInfo [] LinuxGetDrives ()
+               {
+                       using (StreamReader mounts = TryOpen ("/proc/mounts")){
+                               ArrayList drives = new ArrayList ();
+                               string line;
+                               
+                               while ((line = mounts.ReadLine ()) != null){
+                                       if (line.StartsWith ("rootfs"))
+                                               continue;
+                                       int p;
+
+                                       p = line.IndexOf (' ');
+                                       if (p == -1)
+                                               continue;
+                                       string rest = line.Substring (p+1);
+                                       p = rest.IndexOf (' ');
+                                       if (p == -1)
+                                               continue;
+                                       string path = rest.Substring (0, p);
+                                       rest = rest.Substring (p+1);
+                                       p = rest.IndexOf (' ');
+                                       if (p == -1)
+                                               continue;
+                                       string fstype = rest.Substring (0, p);
+                                       drives.Add (new DriveInfo 
(_DriveType.Linux, path, fstype));
+                               }
+
+                               return (DriveInfo []) drives.ToArray (typeof 
(DriveInfo));
+                       }
+               }
+               
+               static DriveInfo [] UnixGetDrives ()
+               {
+                       DriveInfo [] di = null;
+
+                       try {
+                               using (StreamReader linux_ostype = TryOpen 
("/proc/sys/kernel/ostype")){
+                                       Console.WriteLine ("here {0}", 
linux_ostype);
+                                       if (linux_ostype != null){
+                                               string line = 
linux_ostype.ReadLine ();
+
+                                               Console.WriteLine ("L: {0}", 
line);
+                                               if (line == "Linux")
+                                                       di = LinuxGetDrives ();
+                                       }
+                               }
+                               
+                               if (di != null)
+                                       return di;
+                       } catch (Exception e) {
+                               Console.WriteLine ("Got {0}", e);
+                               // If anything happens.
+                       }
+                       
+                       DriveInfo [] unknown = new DriveInfo [1];
+                       unknown [0]= new DriveInfo (_DriveType.GenericUnix, 
"/", "unixfs");
+
+                       return unknown;
+               }
+
+               static DriveInfo [] WindowsGetDrives ()
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               [MonoTODO("Currently only implemented on Mono/Linux")]
+               public static DriveInfo[] GetDrives ()
+               {
+                       int platform = (int) Environment.Platform;
+
+                       if (platform == 4 || platform == 128)
+                               return UnixGetDrives ();
+                       else
+                               return WindowsGetDrives ();
+               }
+
+               public void GetObjectData 
(System.Runtime.Serialization.SerializationInfo info, 
System.Runtime.Serialization.StreamingContext context)
+               {
+                       throw new NotImplementedException ();
+               }
+       }
+}
+
+#endif


Property changes on: trunk/mcs/class/corlib/System.IO/DriveInfo.cs
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/mcs/class/corlib/System.IO/DriveType.cs
===================================================================
--- trunk/mcs/class/corlib/System.IO/DriveType.cs       2006-11-27 03:41:18 UTC 
(rev 68492)
+++ trunk/mcs/class/corlib/System.IO/DriveType.cs       2006-11-27 04:21:10 UTC 
(rev 68493)
@@ -0,0 +1,41 @@
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+using System;
+using System.Text;
+
+namespace System.IO {
+
+       public enum DriveType {
+               CDRom = 5,
+               Fixed = 3,
+               Network = 4,
+               NoRootDirectory = 1,
+               Ram = 6,
+               Removable = 2,
+               Unknown = 0
+       }
+}
+
+#endif


Property changes on: trunk/mcs/class/corlib/System.IO/DriveType.cs
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/mcs/class/corlib/corlib.dll.sources
===================================================================
--- trunk/mcs/class/corlib/corlib.dll.sources   2006-11-27 03:41:18 UTC (rev 
68492)
+++ trunk/mcs/class/corlib/corlib.dll.sources   2006-11-27 04:21:10 UTC (rev 
68493)
@@ -152,7 +152,6 @@
 System/IDisposable.cs
 System/IFormatProvider.cs
 System/IFormattable.cs
-System/INullableValue.cs
 System/IndexOutOfRangeException.cs
 System/Int16.cs
 System/Int32.cs
@@ -343,7 +342,9 @@
 System.IO/Directory.cs
 System.IO/DirectoryInfo.cs
 System.IO/DirectoryNotFoundException.cs
+System.IO/DriveInfo.cs
 System.IO/DriveNotFoundException.cs
+System.IO/DriveType.cs
 System.IO/EndOfStreamException.cs
 System.IO/File.cs
 System.IO/FileAccess.cs

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to