[Mono.Posix] Add file that was on the xamarin-android repo so it can be built from...
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 15 Mar 2017 23:30:34 +0000 (16:30 -0700)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 15 Mar 2017 23:30:34 +0000 (16:30 -0700)
mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs [new file with mode: 0644]
mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs
mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources [new file with mode: 0644]

diff --git a/mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs b/mcs/class/Mono.Posix/Mono.Unix.Android/AndroidUtils.cs
new file mode 100644 (file)
index 0000000..3b40a82
--- /dev/null
@@ -0,0 +1,47 @@
+using System;
+using System.Reflection;
+
+// using Android.Runtime;
+// using Android.Util;
+
+namespace Mono.Unix.Android
+{
+       internal sealed class AndroidUtils
+       {
+               const string TAG = "Mono.Posix";
+
+               delegate void DetectCPUAndArchitecture (out ushort builtForCPU, out ushort runningOnCPU, out bool is64bit);
+
+               readonly static DetectCPUAndArchitecture detectCPUAndArchitecture;
+
+               static AndroidUtils ()
+               {
+                       Type androidRuntime = Type.GetType ("Android.Runtime.AndroidEnvironment, Mono.Android", true);
+
+                       MethodInfo mi = androidRuntime.GetMethod ("DetectCPUAndArchitecture", BindingFlags.NonPublic | BindingFlags.Static);
+                       detectCPUAndArchitecture = (DetectCPUAndArchitecture) Delegate.CreateDelegate (typeof(DetectCPUAndArchitecture), mi);
+               }
+
+               public static bool AreRealTimeSignalsSafe ()
+               {
+                       ushort built_for_cpu;
+                       ushort running_on_cpu;
+                       bool is64bit;
+
+                       detectCPUAndArchitecture (out built_for_cpu, out running_on_cpu, out is64bit);
+
+                       // CPUArchitecture builtForCPU = Enum.IsDefined (typeof (CPUArchitecture), built_for_cpu) ? (CPUArchitecture)built_for_cpu : CPUArchitecture.Unknown;
+                       // CPUArchitecture runningOnCPU = Enum.IsDefined (typeof (CPUArchitecture), running_on_cpu) ? (CPUArchitecture)running_on_cpu : CPUArchitecture.Unknown;
+
+                       // Log.Info (TAG, " Built for CPU: {0}", builtForCPU);
+                       // Log.Info (TAG, "Running on CPU: {0}", runningOnCPU);
+                       // Log.Info (TAG, "64-bit process: {0}", is64bit ? "yes" : "no");
+
+                       // For now real-time signals aren't safe at all, alas
+                       bool safe = false;
+                       // Log.Info (TAG, "Real-time signals are {0}safe on this platform", safe ? String.Empty : "not ");
+                       
+                       return safe;
+               }
+       }
+}
\ No newline at end of file
index 57c03140112b75746de381257b13e4b763886f5c..810e13a7ca8fe68b471e058d9df45bc4c0e1e43f 100644 (file)
@@ -8,6 +8,9 @@ using System;
 using System.IO;
 using System.Runtime.InteropServices;
 using Mono.Unix.Native;
+#if MONODROID
+using Mono.Unix.Android;
+#endif
 
 namespace Mono.Unix.Native {
 
@@ -17,7 +20,17 @@ namespace Mono.Unix.Native {
                //
                // Non-generated exports
                //
-#if !MONODROID
+#if MONODROID
+               [DllImport (LIB, EntryPoint="Mono_Posix_FromRealTimeSignum")]
+               static extern int HelperFromRealTimeSignum (Int32 offset, out Int32 rval);
+
+               static int FromRealTimeSignum (Int32 offset, out Int32 rval)
+               {
+                       if (!AndroidUtils.AreRealTimeSignalsSafe ())
+                               throw new PlatformNotSupportedException ("Real-time signals are not supported on this Android architecture");
+                       return HelperFromRealTimeSignum (offset, out rval);
+               }
+#else
                [DllImport (LIB, EntryPoint="Mono_Posix_FromRealTimeSignum")]
                private static extern int FromRealTimeSignum (Int32 offset, out Int32 rval);
 #endif
diff --git a/mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources b/mcs/class/Mono.Posix/monodroid_Mono.Posix.dll.sources
new file mode 100644 (file)
index 0000000..0d242e6
--- /dev/null
@@ -0,0 +1,2 @@
+#include Mono.Posix.dll.sources
+./Mono.Unix.Android/AndroidUtils.cs