Merge pull request #3715 from kumpera/fix-44707
[mono.git] / mcs / class / corlib / System / Environment.cs
index 2b031f332871e671df0acdb1e5972283ddc965b7..e8befe2e061e34dc9bd7fda7213c8b2c2f76c222 100644 (file)
@@ -57,7 +57,7 @@ namespace System {
                 * of icalls, do not require an increment.
                 */
 #pragma warning disable 169
-               private const int mono_corlib_version = 151;
+               private const int mono_corlib_version = 159;
 #pragma warning restore 169
 
                [ComVisible (true)]
@@ -322,7 +322,7 @@ namespace System {
                                return trace.ToString ();
                        }
                }
-#if !NET_2_1
+
                /// <summary>
                /// Get a fully qualified path to the system directory
                /// </summary>
@@ -331,7 +331,7 @@ namespace System {
                                return GetFolderPath (SpecialFolder.System);
                        }
                }
-#endif
+
                /// <summary>
                /// Get the number of milliseconds that have elapsed since the system was booted
                /// </summary>
@@ -472,7 +472,15 @@ namespace System {
                public extern static string[] GetCommandLineArgs ();
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               internal extern static string internalGetEnvironmentVariable (string variable);
+               internal extern static string internalGetEnvironmentVariable_native (IntPtr variable);
+
+               internal static string internalGetEnvironmentVariable (string variable) {
+                       if (variable == null)
+                               return null;
+                       using (var h = Mono.RuntimeMarshal.MarshalString (variable)) {
+                               return internalGetEnvironmentVariable_native (h.Value);
+                       }
+               }
 
                /// <summary>
                /// Return a string containing the value of the environment
@@ -480,7 +488,7 @@ namespace System {
                /// </summary>
                public static string GetEnvironmentVariable (string variable)
                {
-#if !NET_2_1
+#if !MOBILE
                        if (SecurityManager.SecurityEnabled) {
                                new EnvironmentPermission (EnvironmentPermissionAccess.Read, variable).Demand ();
                        }
@@ -503,7 +511,7 @@ namespace System {
                /// <summary>
                /// Return a set of all environment variables and their values
                /// </summary>
-#if !NET_2_1
+#if !MOBILE
                public static IDictionary GetEnvironmentVariables ()
                {
                        StringBuilder sb = null;
@@ -565,7 +573,7 @@ namespace System {
                        else
                                dir = UnixGetFolderPath (folder, option);
 
-#if !NET_2_1
+#if !MOBILE
                        if ((dir != null) && (dir.Length > 0) && SecurityManager.SecurityEnabled) {
                                new FileIOPermission (FileIOPermissionAccess.PathDiscovery, dir).Demand ();
                        }
@@ -862,6 +870,22 @@ namespace System {
                        }
                }
 #else
+               public static string GetEnvironmentVariable (string variable, EnvironmentVariableTarget target)
+               {
+                       if (target == EnvironmentVariableTarget.Process)
+                               return GetEnvironmentVariable (variable);
+
+                       return null;
+               }
+
+               public static IDictionary GetEnvironmentVariables (EnvironmentVariableTarget target)
+               {
+                       if (target == EnvironmentVariableTarget.Process)
+                               return GetEnvironmentVariables ();
+
+                       return (IDictionary)new Hashtable ();
+               }
+
                public static void SetEnvironmentVariable (string variable, string value)
                {
                        if (variable == null)
@@ -875,6 +899,14 @@ namespace System {
 
                        InternalSetEnvironmentVariable (variable, value);
                }
+
+               public static void SetEnvironmentVariable (string variable, string value, EnvironmentVariableTarget target)
+               {
+                       if (target == EnvironmentVariableTarget.Process)
+                               SetEnvironmentVariable (variable, value);
+
+                       // other targets ignored
+               }
 #endif
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                internal static extern void InternalSetEnvironmentVariable (string variable, string value);
@@ -893,7 +925,9 @@ namespace System {
                [SecurityCritical]
                public static void FailFast (string message, Exception exception)
                {
-                       throw new NotImplementedException ();
+#pragma warning disable 618
+                       throw new ExecutionEngineException (message, exception);
+#pragma warning restore
                }
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
@@ -927,7 +961,7 @@ namespace System {
                }
 #endif
 
-#if !NET_2_1
+#if !MOBILE
                //
                // Used by gacutil.exe
                //
@@ -962,6 +996,14 @@ namespace System {
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                internal extern static int GetPageSize ();
 
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               extern private static string get_bundled_machine_config ();
+
+               internal static string GetBundledMachineConfig ()
+               {
+                       return get_bundled_machine_config ();
+               }
+
                static internal bool IsUnix {
                        get {
                                int platform = (int) Environment.Platform;