summaryrefslogtreecommitdiff
path: root/external/ikvm/runtime/openjdk/misc.cs
diff options
context:
space:
mode:
Diffstat (limited to 'external/ikvm/runtime/openjdk/misc.cs')
-rw-r--r--external/ikvm/runtime/openjdk/misc.cs585
1 files changed, 585 insertions, 0 deletions
diff --git a/external/ikvm/runtime/openjdk/misc.cs b/external/ikvm/runtime/openjdk/misc.cs
new file mode 100644
index 0000000000..85529d9578
--- /dev/null
+++ b/external/ikvm/runtime/openjdk/misc.cs
@@ -0,0 +1,585 @@
+/*
+ Copyright (C) 2007-2013 Jeroen Frijters
+ Copyright (C) 2009 Volker Berlin (i-net software)
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jeroen Frijters
+ jeroen@frijters.net
+
+*/
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Security;
+using System.Security.Cryptography;
+using System.Security.Principal;
+using IKVM.Internal;
+
+static class Java_ikvm_runtime_Startup
+{
+ // this method is called from ikvm.runtime.Startup.exitMainThread() and from JNI's DetachCurrentThread
+ public static void jniDetach()
+ {
+#if !FIRST_PASS
+ java.lang.Thread.currentThread().die();
+#endif
+ }
+
+ public static void addBootClassPathAssembly(Assembly asm)
+ {
+ ClassLoaderWrapper.GetBootstrapClassLoader().AddDelegate(AssemblyClassLoader.FromAssembly(asm));
+ }
+}
+
+static class Java_java_lang_ref_Reference
+{
+ public static bool noclassgc()
+ {
+#if CLASSGC
+ return !JVM.classUnloading;
+#else
+ return true;
+#endif
+ }
+}
+
+static class Java_java_util_logging_FileHandler
+{
+ public static bool isSetUID()
+ {
+ // TODO
+ return false;
+ }
+}
+
+static class Java_java_util_jar_JarFile
+{
+ public static string[] getMetaInfEntryNames(object thisJarFile)
+ {
+#if FIRST_PASS
+ return null;
+#else
+ java.util.zip.ZipFile zf = (java.util.zip.ZipFile)thisJarFile;
+ java.util.Enumeration entries = zf.entries();
+ List<string> list = null;
+ while (entries.hasMoreElements())
+ {
+ java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry)entries.nextElement();
+ if (entry.getName().StartsWith("META-INF/", StringComparison.OrdinalIgnoreCase))
+ {
+ if (list == null)
+ {
+ list = new List<string>();
+ }
+ list.Add(entry.getName());
+ }
+ }
+ return list == null ? null : list.ToArray();
+#endif
+ }
+}
+
+static class Java_java_util_zip_ClassStubZipEntry
+{
+ public static void expandIkvmClasses(object _zipFile, object _entries)
+ {
+#if !FIRST_PASS
+ java.util.zip.ZipFile zipFile = (java.util.zip.ZipFile)_zipFile;
+ java.util.LinkedHashMap entries = (java.util.LinkedHashMap)_entries;
+
+ try
+ {
+ string path = zipFile.getName();
+ java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry)entries.get(JVM.JarClassList);
+ if (entry != null && VirtualFileSystem.IsVirtualFS(path))
+ {
+ using (VirtualFileSystem.ZipEntryStream stream = new VirtualFileSystem.ZipEntryStream(zipFile, entry))
+ {
+ entries.remove(entry.name);
+ BinaryReader br = new BinaryReader(stream);
+ int count = br.ReadInt32();
+ for (int i = 0; i < count; i++)
+ {
+ java.util.zip.ClassStubZipEntry classEntry = new java.util.zip.ClassStubZipEntry(path, br.ReadString());
+ classEntry.setMethod(java.util.zip.ClassStubZipEntry.STORED);
+ classEntry.setTime(entry.getTime());
+ entries.put(classEntry.name, classEntry);
+ }
+ }
+ }
+ }
+ catch (java.io.IOException)
+ {
+ }
+ catch (IOException)
+ {
+ }
+#endif
+ }
+}
+
+static class Java_sun_awt_image_ByteComponentRaster
+{
+ public static void initIDs()
+ {
+ }
+}
+
+static class Java_sun_awt_image_BytePackedRaster
+{
+ public static void initIDs()
+ {
+ }
+}
+
+static class Java_sun_awt_image_IntegerComponentRaster
+{
+ public static void initIDs()
+ {
+ }
+}
+
+static class Java_sun_awt_image_ShortComponentRaster
+{
+ public static void initIDs()
+ {
+ }
+}
+
+static class Java_sun_awt_FontDescriptor
+{
+ public static void initIDs()
+ {
+ }
+}
+
+static class Java_sun_invoke_anon_AnonymousClassLoader
+{
+ public static java.lang.Class loadClassInternal(java.lang.Class hostClass, byte[] classFile, object[] patchArray)
+ {
+ throw new NotImplementedException();
+ }
+}
+
+static class Java_sun_net_spi_DefaultProxySelector
+{
+ public static bool init()
+ {
+ return true;
+ }
+
+ public static object getSystemProxy(object thisDefaultProxySelector, string protocol, string host)
+ {
+ // TODO on Whidbey we might be able to use System.Net.Configuration.DefaultProxySection.Proxy
+ return null;
+ }
+}
+
+static class Java_sun_nio_fs_NetPath
+{
+ public static string toRealPathImpl(string path)
+ {
+#if FIRST_PASS
+ return null;
+#else
+ path = java.io.FileSystem.getFileSystem().canonicalize(path);
+ if (VirtualFileSystem.IsVirtualFS(path))
+ {
+ if (VirtualFileSystem.CheckAccess(path, Java_java_io_Win32FileSystem.ACCESS_READ))
+ {
+ return path;
+ }
+ throw new java.nio.file.NoSuchFileException(path);
+ }
+ try
+ {
+ File.GetAttributes(path);
+ return path;
+ }
+ catch (FileNotFoundException)
+ {
+ throw new java.nio.file.NoSuchFileException(path);
+ }
+ catch (DirectoryNotFoundException)
+ {
+ throw new java.nio.file.NoSuchFileException(path);
+ }
+ catch (UnauthorizedAccessException)
+ {
+ throw new java.nio.file.AccessDeniedException(path);
+ }
+ catch (SecurityException)
+ {
+ throw new java.nio.file.AccessDeniedException(path);
+ }
+ catch (ArgumentException x)
+ {
+ throw new java.nio.file.FileSystemException(path, null, x.Message);
+ }
+ catch (NotSupportedException x)
+ {
+ throw new java.nio.file.FileSystemException(path, null, x.Message);
+ }
+ catch (IOException x)
+ {
+ throw new java.nio.file.FileSystemException(path, null, x.Message);
+ }
+#endif
+ }
+}
+
+static class Java_sun_rmi_server_MarshalInputStream
+{
+ public static object latestUserDefinedLoader()
+ {
+ return Java_java_io_ObjectInputStream.latestUserDefinedLoader();
+ }
+}
+
+static class Java_sun_security_provider_NativeSeedGenerator
+{
+ public static bool nativeGenerateSeed(byte[] result)
+ {
+ try
+ {
+ RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
+ csp.GetBytes(result);
+ return true;
+ }
+ catch (CryptographicException)
+ {
+ return false;
+ }
+ }
+}
+
+static class Java_com_sun_java_util_jar_pack_NativeUnpack
+{
+ public static void initIDs()
+ {
+ }
+
+ public static long start(object thisNativeUnpack, object buf, long offset)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static bool getNextFile(object thisNativeUnpack, object[] parts)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static object getUnusedInput(object thisNativeUnpack)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static long finish(object thisNativeUnpack)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static bool setOption(object thisNativeUnpack, string opt, string value)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string getOption(object thisNativeUnpack, string opt)
+ {
+ throw new NotImplementedException();
+ }
+}
+
+static class Java_com_sun_security_auth_module_NTSystem
+{
+ public static void getCurrent(object thisObj, bool debug)
+ {
+ WindowsIdentity id = WindowsIdentity.GetCurrent();
+ string[] name = id.Name.Split('\\');
+ SetField(thisObj, "userName", name[1]);
+ SetField(thisObj, "domain", name[0]);
+ SetField(thisObj, "domainSID", id.User.AccountDomainSid.Value);
+ SetField(thisObj, "userSID", id.User.Value);
+ string[] groups = new string[id.Groups.Count];
+ for (int i = 0; i < groups.Length; i++)
+ {
+ groups[i] = id.Groups[i].Value;
+ }
+ SetField(thisObj, "groupIDs", groups);
+ // HACK it turns out that Groups[0] is the primary group, but AFAIK this is not documented anywhere
+ SetField(thisObj, "primaryGroupID", groups[0]);
+ }
+
+ private static void SetField(object thisObj, string field, object value)
+ {
+ thisObj.GetType().GetField(field, BindingFlags.NonPublic | BindingFlags.Instance).SetValue(thisObj, value);
+ }
+
+ public static long getImpersonationToken0(object thisObj)
+ {
+ return WindowsIdentity.GetCurrent().Token.ToInt64();
+ }
+}
+
+static class Java_com_sun_security_auth_module_SolarisSystem
+{
+ public static void getSolarisInfo(object thisObj)
+ {
+ throw new NotImplementedException();
+ }
+}
+
+static class Java_com_sun_security_auth_module_UnixSystem
+{
+ public static void getUnixInfo(object thisObj)
+ {
+ throw new NotImplementedException();
+ }
+}
+
+static class Java_com_sun_media_sound_JDK13Services
+{
+ public static string getDefaultProviderClassName(object deviceClass)
+ {
+ return null;
+ }
+
+ public static string getDefaultInstanceName(object deviceClass)
+ {
+ return null;
+ }
+
+ public static object getProviders(object providerClass)
+ {
+#if FIRST_PASS
+ return null;
+#else
+ return new java.util.ArrayList();
+#endif
+ }
+}
+
+static class Java_java_awt_AWTEvent
+{
+ public static void initIDs() { }
+ public static void nativeSetSource(object thisObj, object peer) { }
+}
+
+static class Java_java_awt_Button
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Checkbox
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_CheckboxMenuItem
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Color
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Component
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Container
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Cursor
+{
+ public static void initIDs() { }
+ public static void finalizeImpl(Int64 pData) { }
+}
+
+static class Java_java_awt_Dialog
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Dimension
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Event
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_FileDialog
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Frame
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_FontMetrics
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Insets
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_KeyboardFocusManager
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Label
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Menu
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_MenuBar
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_MenuComponent
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_MenuItem
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Rectangle
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Scrollbar
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_ScrollPane
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_ScrollPaneAdjustable
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_SplashScreen
+{
+ public static void _update(long splashPtr, int[] data, int x, int y, int width, int height, int scanlineStride) { }
+ public static bool _isVisible(long splashPtr) { return false; }
+ public static object _getBounds(long splashPtr) { return null; }
+ public static long _getInstance() { return 0; }
+ public static void _close(long splashPtr) { }
+ public static String _getImageFileName(long splashPtr) { return null; }
+ public static String _getImageJarName(long splashPtr) { return null; }
+ public static bool _setImageData(long splashPtr, byte[] data) { return false; }
+}
+
+static class Java_java_awt_TextArea
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_TextField
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Toolkit
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_TrayIcon
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_Window
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_event_InputEvent
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_event_MouseEvent
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_event_KeyEvent
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_image_ColorModel
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_image_ComponentSampleModel
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_image_Kernel
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_image_Raster
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_image_SinglePixelPackedSampleModel
+{
+ public static void initIDs() { }
+}
+
+static class Java_java_awt_image_SampleModel
+{
+ public static void initIDs() { }
+}