diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0c2af3595b44a74a479d68de7322c6bc8b37ca97..794adb0cfa7650ba4298e45b488e9ac54d57f0a7 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,11 @@ +2004-03-11 Michael Koch <konqueror@gmx.de> + + * gnu/java/nio/PipeImpl.java + (SourceChannelImpl): Made final. + (read): Implemented. + (SinkChannelImpl): Made final. + (write): Implemented. + 2004-03-11 Michael Koch <konqueror@gmx.de> * gnu/java/net/PlainDatagramSocketImpl.java: diff --git a/libjava/gnu/java/nio/PipeImpl.java b/libjava/gnu/java/nio/PipeImpl.java index da608d21c19f75706935a34bd77ded5149ec202f..b9a343c0c96cb480b7efc9787d620b40a2e9fde3 100644 --- a/libjava/gnu/java/nio/PipeImpl.java +++ b/libjava/gnu/java/nio/PipeImpl.java @@ -1,5 +1,5 @@ /* PipeImpl.java -- - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,7 +44,7 @@ import java.nio.channels.spi.SelectorProvider; class PipeImpl extends Pipe { - public final class SourceChannelImpl extends Pipe.SourceChannel + public static final class SourceChannelImpl extends Pipe.SourceChannel { private int native_fd; @@ -79,10 +79,22 @@ class PipeImpl extends Pipe return read (srcs, 0, srcs.length); } - public final long read (ByteBuffer[] srcs, int offset, int len) + public synchronized final long read (ByteBuffer[] srcs, int offset, int len) throws IOException { - throw new Error ("Not implemented"); + if (offset < 0 + || offset > srcs.length + || len < 0 + || len > srcs.length - offset) + throw new IndexOutOfBoundsException(); + + long bytesRead = 0; + + for (int index = 0; index < len; index++) + bytesRead += read (srcs [offset + index]); + + return bytesRead; + } public final int getNativeFD() @@ -91,7 +103,7 @@ class PipeImpl extends Pipe } } - public final class SinkChannelImpl extends Pipe.SinkChannel + public static final class SinkChannelImpl extends Pipe.SinkChannel { private int native_fd; @@ -120,16 +132,27 @@ class PipeImpl extends Pipe throw new Error ("Not implemented"); } - public final long write (ByteBuffer[] dsts) + public final long write (ByteBuffer[] srcs) throws IOException { - return write (dsts, 0, dsts.length); + return write (srcs, 0, srcs.length); } - public final long write (ByteBuffer[] dsts, int offset, int len) + public synchronized final long write (ByteBuffer[] srcs, int offset, int len) throws IOException { - throw new Error ("Not implemented"); + if (offset < 0 + || offset > srcs.length + || len < 0 + || len > srcs.length - offset) + throw new IndexOutOfBoundsException(); + + long bytesWritten = 0; + + for (int index = 0; index < len; index++) + bytesWritten += write (srcs [offset + index]); + + return bytesWritten; } public final int getNativeFD()