? Environment.diff
? version.diff
Index: ChangeLog
===================================================================
RCS file: /cvs/public/mcs/class/corlib/System/ChangeLog,v
retrieving revision 1.758
diff -u -r1.758 ChangeLog
--- ChangeLog	23 Apr 2004 15:02:26 -0000	1.758
+++ ChangeLog	23 Apr 2004 19:58:43 -0000
@@ -1,3 +1,9 @@
+2004-04-xx  Sebastien Pouliot  <sebastien@ximian.com>
+
+	* Environment.cs: Completed OSVersion property.
+	* Version.cs: Added internal CreateFromString() to "try" to build the
+	best version number form the specified string.
+
 2004-04-23  Sebastien Pouliot  <sebastien@ximian.com>
 
 	* Environment.cs: Better support for GetFolderPath (same results as MS 
Index: Environment.cs
===================================================================
RCS file: /cvs/public/mcs/class/corlib/System/Environment.cs,v
retrieving revision 1.63
diff -u -r1.63 Environment.cs
--- Environment.cs	23 Apr 2004 15:02:26 -0000	1.63
+++ Environment.cs	23 Apr 2004 19:58:43 -0000
@@ -151,15 +151,18 @@
 			get;
 		}
 
+		[MethodImplAttribute (MethodImplOptions.InternalCall)]
+		internal static extern string GetOSVersionString ();
+
 		/// <summary>
 		/// Gets the current OS version information
 		/// </summary>
-		[MonoTODO("Correct version")]
 		public static OperatingSystem OSVersion {
 			get {
-				if (os == null)
-					os = new OperatingSystem (Platform, new Version (5,1,2600,0));
-
+				if (os == null) {
+					Version v = Version.CreateFromString (GetOSVersionString ());
+					os = new OperatingSystem (Platform, v);
+				}
 				return os;
 			}
 		}
Index: Version.cs
===================================================================
RCS file: /cvs/public/mcs/class/corlib/System/Version.cs,v
retrieving revision 1.13
diff -u -r1.13 Version.cs
--- Version.cs	8 Mar 2004 19:42:28 -0000	1.13
+++ Version.cs	23 Apr 2004 19:58:43 -0000
@@ -267,5 +267,52 @@
 		{
 			return v1.CompareTo (v2) <= 0;
 		}
+
+		// a very gentle way to construct a Version object which takes 
+		// the first four numbers in a string as the version
+		internal static Version CreateFromString (string info)
+		{
+			int major = 0;
+			int minor = 0;
+			int build = 0;
+			int revision = 0;
+			int state = 1;
+			int number = UNDEFINED; // string may not begin with a digit
+
+			for (int i=0; i < info.Length; i++) {
+				char c = info [i];
+				if (Char.IsDigit (c)) {
+					if (number < 0) {
+						number = (c - '0');
+					}
+					else {
+						number = (number * 10) + (c - '0');
+					}
+				}
+				else if (number >= 0) {
+					// assign
+					switch (state) {
+					case 1:
+						major = number;
+						break;
+					case 2:
+						minor = number;
+						break;
+					case 3:
+						build = number;
+						break;
+					case 4:
+						revision = number;
+						break;
+					}
+					number = -1;
+					state ++;
+				}
+				// ignore end of string
+				if (state == 5)
+					break;
+			}
+			return new Version (major, minor, build, revision);
+		}
 	}
 }
