From 3d1824e144da35bc967249773f5c8adbc487fd9e Mon Sep 17 00:00:00 2001 From: jfrijters Date: Fri, 11 Mar 2005 13:56:44 +0000 Subject: [PATCH] *** empty log message *** --- classpath/allsources.lst | 168 +++++++++++++++--- .../java/nio/channels/FileChannelImpl.java | 144 +++++++++++---- classpath/ikvm/lang/ByteArrayHack.java | 35 ---- ikvm/starter.cs | 4 +- runtime/ByteCodeHelper.cs | 4 +- 5 files changed, 261 insertions(+), 94 deletions(-) delete mode 100644 classpath/ikvm/lang/ByteArrayHack.java diff --git a/classpath/allsources.lst b/classpath/allsources.lst index 659f31a3..637fb928 100644 --- a/classpath/allsources.lst +++ b/classpath/allsources.lst @@ -1,29 +1,28 @@ -ikvm/internal/LibraryVMInterface.java -ikvm/lang/CIL.java -ikvm/lang/ByteArrayHack.java gnu/classpath/Configuration.java gnu/classpath/RawData.java gnu/classpath/VMStackWalker.java gnu/classpath/VMSystemProperties.java -gnu/java/nio/channels/FileChannelImpl.java -gnu/java/net/protocol/ikvmres/Handler.java -gnu/java/net/PlainSocketImpl.java gnu/java/net/PlainDatagramSocketImpl.java +gnu/java/net/PlainSocketImpl.java +gnu/java/net/protocol/ikvmres/Handler.java +gnu/java/nio/channels/FileChannelImpl.java +ikvm/internal/LibraryVMInterface.java +ikvm/lang/CIL.java java/io/VMFile.java -java/lang/LibraryVMInterfaceImpl.java -java/lang/VMThread.java -java/lang/VMClass.java -java/lang/VMDouble.java -java/lang/VMFloat.java -java/lang/VMSystem.java java/lang/ExceptionHelper.java -java/lang/StringHelper.java -java/lang/VMClassLoader.java -java/lang/VMRuntime.java +java/lang/LibraryVMInterfaceImpl.java java/lang/ref/Reference.java java/lang/reflect/Constructor.java -java/lang/reflect/Method.java java/lang/reflect/Field.java +java/lang/reflect/Method.java +java/lang/StringHelper.java +java/lang/VMClass.java +java/lang/VMClassLoader.java +java/lang/VMDouble.java +java/lang/VMFloat.java +java/lang/VMRuntime.java +java/lang/VMSystem.java +java/lang/VMThread.java java/nio/channels/VMChannels.java java/nio/VMDirectByteBuffer.java java/security/VMAccessController.java @@ -215,6 +214,8 @@ sun/misc/Ref.java ../../classpath/gnu/classpath/ServiceFactory.java ../../classpath/gnu/classpath/ServiceProviderLoadingAction.java ../../classpath/gnu/classpath/SystemProperties.java +../../classpath/gnu/CORBA/primitiveArrayTypeCode.java +../../classpath/gnu/CORBA/primitiveTypeCode.java ../../classpath/gnu/java/awt/BitMaskExtent.java ../../classpath/gnu/java/awt/BitwiseXORComposite.java ../../classpath/gnu/java/awt/Buffers.java @@ -352,10 +353,6 @@ sun/misc/Ref.java ../../classpath/gnu/java/lang/ClassHelper.java ../../classpath/gnu/java/lang/MainThread.java ../../classpath/gnu/java/lang/reflect/TypeSignature.java -../../classpath/gnu/java/locale/Calendar.java -../../classpath/gnu/java/locale/Calendar_de.java -../../classpath/gnu/java/locale/Calendar_en.java -../../classpath/gnu/java/locale/Calendar_nl.java ../../classpath/gnu/java/locale/LocaleHelper.java ../../classpath/gnu/java/locale/LocaleInformation.java ../../classpath/gnu/java/locale/LocaleInformation_aa.java @@ -680,6 +677,7 @@ sun/misc/Ref.java ../../classpath/gnu/java/net/protocol/http/ResponseBodyReader.java ../../classpath/gnu/java/net/protocol/http/ResponseHeaderHandler.java ../../classpath/gnu/java/net/protocol/http/SimpleCookieManager.java +../../classpath/gnu/java/net/protocol/https/Handler.java ../../classpath/gnu/java/net/protocol/jar/Connection.java ../../classpath/gnu/java/net/protocol/jar/Handler.java ../../classpath/gnu/java/net/URLParseError.java @@ -827,6 +825,29 @@ sun/misc/Ref.java ../../classpath/gnu/javax/rmi/CORBA/UtilDelegateImpl.java ../../classpath/gnu/javax/rmi/CORBA/ValueHandlerImpl.java ../../classpath/gnu/javax/rmi/PortableServer.java +../../classpath/gnu/javax/swing/text/html/parser/gnuDTD.java +../../classpath/gnu/javax/swing/text/html/parser/HTML_401F.java +../../classpath/gnu/javax/swing/text/html/parser/htmlAttributeSet.java +../../classpath/gnu/javax/swing/text/html/parser/htmlValidator.java +../../classpath/gnu/javax/swing/text/html/parser/models/list.java +../../classpath/gnu/javax/swing/text/html/parser/models/node.java +../../classpath/gnu/javax/swing/text/html/parser/models/noTagModel.java +../../classpath/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java +../../classpath/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java +../../classpath/gnu/javax/swing/text/html/parser/models/transformer.java +../../classpath/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/Buffer.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/Constants.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/Location.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/node.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/ParseException.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/Queue.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java +../../classpath/gnu/javax/swing/text/html/parser/support/low/Token.java +../../classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java +../../classpath/gnu/javax/swing/text/html/parser/support/Parser.java +../../classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java ../../classpath/gnu/regexp/CharIndexed.java ../../classpath/gnu/regexp/CharIndexedCharArray.java ../../classpath/gnu/regexp/CharIndexedInputStream.java @@ -889,6 +910,17 @@ sun/misc/Ref.java ../../classpath/gnu/xml/dom/DomXPathResult.java ../../classpath/gnu/xml/dom/DTDAttributeTypeInfo.java ../../classpath/gnu/xml/dom/DTDElementTypeInfo.java +../../classpath/gnu/xml/dom/html2/DomHTMLAnchorElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLBRElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java +../../classpath/gnu/xml/dom/html2/DomHTMLCollection.java +../../classpath/gnu/xml/dom/html2/DomHTMLDocument.java +../../classpath/gnu/xml/dom/html2/DomHTMLElement.java ../../classpath/gnu/xml/dom/ImplementationList.java ../../classpath/gnu/xml/dom/ImplementationSource.java ../../classpath/gnu/xml/dom/JAXPFactory.java @@ -2811,6 +2843,7 @@ sun/misc/Ref.java ../../classpath/javax/swing/text/AttributeSet.java ../../classpath/javax/swing/text/BadLocationException.java ../../classpath/javax/swing/text/Caret.java +../../classpath/javax/swing/text/ChangedCharSetException.java ../../classpath/javax/swing/text/ComponentView.java ../../classpath/javax/swing/text/DefaultCaret.java ../../classpath/javax/swing/text/DefaultEditorKit.java @@ -2824,7 +2857,18 @@ sun/misc/Ref.java ../../classpath/javax/swing/text/GapContent.java ../../classpath/javax/swing/text/Highlighter.java ../../classpath/javax/swing/text/html/HTML.java +../../classpath/javax/swing/text/html/HTMLEditorKit.java +../../classpath/javax/swing/text/html/HTMLFrameHyperlinkEvent.java +../../classpath/javax/swing/text/html/parser/AttributeList.java +../../classpath/javax/swing/text/html/parser/ContentModel.java +../../classpath/javax/swing/text/html/parser/DocumentParser.java +../../classpath/javax/swing/text/html/parser/DTD.java +../../classpath/javax/swing/text/html/parser/DTDConstants.java +../../classpath/javax/swing/text/html/parser/Element.java +../../classpath/javax/swing/text/html/parser/Entity.java +../../classpath/javax/swing/text/html/parser/Parser.java ../../classpath/javax/swing/text/html/parser/ParserDelegator.java +../../classpath/javax/swing/text/html/parser/TagElement.java ../../classpath/javax/swing/text/JTextComponent.java ../../classpath/javax/swing/text/Keymap.java ../../classpath/javax/swing/text/LayeredHighlighter.java @@ -2834,6 +2878,13 @@ sun/misc/Ref.java ../../classpath/javax/swing/text/PlainDocument.java ../../classpath/javax/swing/text/PlainView.java ../../classpath/javax/swing/text/Position.java +../../classpath/javax/swing/text/rtf/ControlWordToken.java +../../classpath/javax/swing/text/rtf/RTFEditorKit.java +../../classpath/javax/swing/text/rtf/RTFParseException.java +../../classpath/javax/swing/text/rtf/RTFParser.java +../../classpath/javax/swing/text/rtf/RTFScanner.java +../../classpath/javax/swing/text/rtf/TextToken.java +../../classpath/javax/swing/text/rtf/Token.java ../../classpath/javax/swing/text/Segment.java ../../classpath/javax/swing/text/SimpleAttributeSet.java ../../classpath/javax/swing/text/StringContent.java @@ -2961,6 +3012,83 @@ sun/misc/Ref.java ../../classpath/org/ietf/jgss/GSSName.java ../../classpath/org/ietf/jgss/MessageProp.java ../../classpath/org/ietf/jgss/Oid.java +../../classpath/org/omg/CORBA/Any.java +../../classpath/org/omg/CORBA/AnyHolder.java +../../classpath/org/omg/CORBA/ARG_IN.java +../../classpath/org/omg/CORBA/ARG_INOUT.java +../../classpath/org/omg/CORBA/ARG_OUT.java +../../classpath/org/omg/CORBA/BAD_CONTEXT.java +../../classpath/org/omg/CORBA/BAD_INV_ORDER.java +../../classpath/org/omg/CORBA/BAD_OPERATION.java +../../classpath/org/omg/CORBA/BAD_OPERATION.java +../../classpath/org/omg/CORBA/BAD_PARAM.java +../../classpath/org/omg/CORBA/BAD_TYPECODE.java +../../classpath/org/omg/CORBA/BooleanHolder.java +../../classpath/org/omg/CORBA/BooleanSeqHolder.java +../../classpath/org/omg/CORBA/Bounds.java +../../classpath/org/omg/CORBA/ByteHolder.java +../../classpath/org/omg/CORBA/CharHolder.java +../../classpath/org/omg/CORBA/CharSeqHolder.java +../../classpath/org/omg/CORBA/COMM_FAILURE.java +../../classpath/org/omg/CORBA/CompletionStatus.java +../../classpath/org/omg/CORBA/Context.java +../../classpath/org/omg/CORBA/ContextList.java +../../classpath/org/omg/CORBA/DATA_CONVERSION.java +../../classpath/org/omg/CORBA/DoubleHolder.java +../../classpath/org/omg/CORBA/DoubleSeqHolder.java +../../classpath/org/omg/CORBA/FixedHolder.java +../../classpath/org/omg/CORBA/FloatHolder.java +../../classpath/org/omg/CORBA/FloatSeqHolder.java +../../classpath/org/omg/CORBA/FREE_MEM.java +../../classpath/org/omg/CORBA/IDLEntity.java +../../classpath/org/omg/CORBA/IMP_LIMIT.java +../../classpath/org/omg/CORBA/INITIALIZE.java +../../classpath/org/omg/CORBA/INTERNAL.java +../../classpath/org/omg/CORBA/INTF_REPOS.java +../../classpath/org/omg/CORBA/IntHolder.java +../../classpath/org/omg/CORBA/INV_FLAG.java +../../classpath/org/omg/CORBA/INV_IDENT.java +../../classpath/org/omg/CORBA/INV_OBJREF.java +../../classpath/org/omg/CORBA/INV_POLICY.java +../../classpath/org/omg/CORBA/INVALID_TRANSACTION.java +../../classpath/org/omg/CORBA/LongHolder.java +../../classpath/org/omg/CORBA/LongLongSeqHolder.java +../../classpath/org/omg/CORBA/LongSeqHolder.java +../../classpath/org/omg/CORBA/MARSHAL.java +../../classpath/org/omg/CORBA/NamedValue.java +../../classpath/org/omg/CORBA/NO_IMPLEMENT.java +../../classpath/org/omg/CORBA/NO_MEMORY.java +../../classpath/org/omg/CORBA/NO_PERMISSION.java +../../classpath/org/omg/CORBA/NO_RESPONSE.java +../../classpath/org/omg/CORBA/OBJ_ADAPTER.java +../../classpath/org/omg/CORBA/Object.java +../../classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java +../../classpath/org/omg/CORBA/OctetSeqHolder.java +../../classpath/org/omg/CORBA/ORB.java +../../classpath/org/omg/CORBA/PERSIST_STORE.java +../../classpath/org/omg/CORBA/portable/IDLEntity.java +../../classpath/org/omg/CORBA/portable/InputStream.java +../../classpath/org/omg/CORBA/portable/OutputStream.java +../../classpath/org/omg/CORBA/portable/Streamable.java +../../classpath/org/omg/CORBA/Principal.java +../../classpath/org/omg/CORBA/ShortHolder.java +../../classpath/org/omg/CORBA/ShortSeqHolder.java +../../classpath/org/omg/CORBA/StringHolder.java +../../classpath/org/omg/CORBA/SystemException.java +../../classpath/org/omg/CORBA/TCKind.java +../../classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java +../../classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java +../../classpath/org/omg/CORBA/TRANSIENT.java +../../classpath/org/omg/CORBA/TypeCode.java +../../classpath/org/omg/CORBA/TypeCodeHolder.java +../../classpath/org/omg/CORBA/TypeCodePackage/BadKind.java +../../classpath/org/omg/CORBA/TypeCodePackage/Bounds.java +../../classpath/org/omg/CORBA/ULongLongSeqHolder.java +../../classpath/org/omg/CORBA/ULongSeqHolder.java +../../classpath/org/omg/CORBA/UNKNOWN.java +../../classpath/org/omg/CORBA/UserException.java +../../classpath/org/omg/CORBA/UShortSeqHolder.java +../../classpath/org/omg/CORBA/WCharSeqHolder.java ../../classpath/vm/reference/gnu/java/nio/VMPipe.java ../../classpath/vm/reference/gnu/java/nio/VMSelector.java ../../classpath/vm/reference/java/io/VMObjectStreamClass.java diff --git a/classpath/gnu/java/nio/channels/FileChannelImpl.java b/classpath/gnu/java/nio/channels/FileChannelImpl.java index dc2950cc..4e9f98d3 100644 --- a/classpath/gnu/java/nio/channels/FileChannelImpl.java +++ b/classpath/gnu/java/nio/channels/FileChannelImpl.java @@ -1,5 +1,5 @@ /* FileChannelImpl.java -- - Copyright (C) 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -238,10 +238,6 @@ public final class FileChannelImpl extends FileChannel if(stream == null) throw new IOException("Invalid FileChannelImpl"); - if (size < 0) - throw new IllegalArgumentException("Length cannot be less than zero " + - size); - try { if(false) throw new cli.System.IO.IOException(); @@ -521,7 +517,7 @@ public final class FileChannelImpl extends FileChannel public MappedByteBuffer mapImpl (char mode, long position, int size) throws IOException { // TODO - throw new Error("not implemented"); + throw new IOException("not implemented"); } public MappedByteBuffer map (FileChannel.MapMode mode, @@ -581,44 +577,120 @@ public final class FileChannelImpl extends FileChannel private static native boolean flush(cli.System.IO.FileStream fs); - public long transferTo (long position, long count, WritableByteChannel target) - throws IOException + // like transferTo, but with a count of less than 2Gbytes + private int smallTransferTo (long position, int count, + WritableByteChannel target) + throws IOException { - if (position < 0 - || count < 0) - throw new IllegalArgumentException (); + ByteBuffer buffer; + try + { + // Try to use a mapped buffer if we can. If this fails for + // any reason we'll fall back to using a ByteBuffer. + buffer = map (MapMode.READ_ONLY, position, count); + } + catch (IOException e) + { + buffer = ByteBuffer.allocate (count); + read (buffer, position); + buffer.flip(); + } - if (!isOpen ()) - throw new ClosedChannelException (); - - if ((mode & READ) == 0) - throw new NonReadableChannelException (); - - // XXX: count needs to be casted from long to int. Dataloss ? - ByteBuffer buffer = ByteBuffer.allocate ((int) count); - read (buffer, position); - buffer.flip(); - return target.write (buffer); + return target.write (buffer); } - public long transferFrom (ReadableByteChannel src, long position, long count) - throws IOException + public long transferTo (long position, long count, + WritableByteChannel target) + throws IOException { - if (position < 0 - || count < 0) - throw new IllegalArgumentException (); + if (position < 0 + || count < 0) + throw new IllegalArgumentException (); - if (!isOpen ()) - throw new ClosedChannelException (); + if (!isOpen ()) + throw new ClosedChannelException (); - if ((mode & WRITE) == 0) - throw new NonWritableChannelException (); + if ((mode & READ) == 0) + throw new NonReadableChannelException (); + + final int pageSize = 65536; + long total = 0; - // XXX: count needs to be casted from long to int. Dataloss ? - ByteBuffer buffer = ByteBuffer.allocate ((int) count); - src.read (buffer); - buffer.flip(); - return write (buffer, position); + while (count > 0) + { + int transferred + = smallTransferTo (position, (int)Math.min (count, pageSize), + target); + if (transferred < 0) + break; + total += transferred; + position += transferred; + count -= transferred; + } + + return total; + } + + // like transferFrom, but with a count of less than 2Gbytes + private int smallTransferFrom (ReadableByteChannel src, long position, + int count) + throws IOException + { + ByteBuffer buffer = null; + + if (src instanceof FileChannel) + { + try + { + // Try to use a mapped buffer if we can. If this fails + // for any reason we'll fall back to using a ByteBuffer. + buffer = ((FileChannel)src).map (MapMode.READ_ONLY, position, + count); + } + catch (IOException e) + { + } + } + + if (buffer == null) + { + buffer = ByteBuffer.allocate ((int) count); + src.read (buffer); + buffer.flip(); + } + + return write (buffer, position); + } + + public long transferFrom (ReadableByteChannel src, long position, + long count) + throws IOException + { + if (position < 0 + || count < 0) + throw new IllegalArgumentException (); + + if (!isOpen ()) + throw new ClosedChannelException (); + + if ((mode & WRITE) == 0) + throw new NonWritableChannelException (); + + final int pageSize = 65536; + long total = 0; + + while (count > 0) + { + int transferred = smallTransferFrom (src, position, + (int)Math.min (count, pageSize)); + if (transferred < 0) + break; + total += transferred; + position += transferred; + count -= transferred; + } + + return total; } public FileLock tryLock (long position, long size, boolean shared) diff --git a/classpath/ikvm/lang/ByteArrayHack.java b/classpath/ikvm/lang/ByteArrayHack.java deleted file mode 100644 index 44d430c2..00000000 --- a/classpath/ikvm/lang/ByteArrayHack.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (C) 2003, 2004, 2005 Jeroen Frijters - - 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 - -*/ -package ikvm.lang; - -/** @deprecated */ -public final class ByteArrayHack -{ - private ByteArrayHack() {} - - public static byte[] cast(byte[] b) - { - return b; - } -} diff --git a/ikvm/starter.cs b/ikvm/starter.cs index 7762d021..e0c8a346 100644 --- a/ikvm/starter.cs +++ b/ikvm/starter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2002, 2003, 2004 Jeroen Frijters + Copyright (C) 2002, 2003, 2004, 2005 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -178,7 +178,7 @@ public class Starter } else if(args[i] == "-version") { - Console.WriteLine("CLR version: {0}", Environment.Version); + Console.WriteLine("CLR version: {0} ({1} bit)", Environment.Version, IntPtr.Size * 8); foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { Console.WriteLine("{0}: {1}", asm.GetName().Name, asm.GetName().Version); diff --git a/runtime/ByteCodeHelper.cs b/runtime/ByteCodeHelper.cs index 22ec22a2..6d779d41 100644 --- a/runtime/ByteCodeHelper.cs +++ b/runtime/ByteCodeHelper.cs @@ -207,7 +207,9 @@ namespace IKVM.Runtime public static object DynamicCast(object obj, RuntimeTypeHandle type, string clazz) { Profiler.Count("DynamicCast"); - if(!DynamicInstanceOf(obj, type, clazz)) + // NOTE it's important that we don't try to load the class if obj == null + // (to be compatible with Sun) + if(obj != null && !DynamicInstanceOf(obj, type, clazz)) { throw JavaException.ClassCastException(ClassLoaderWrapper.GetWrapperFromType(obj.GetType()).Name); }