| // natFileDescriptor.cc - Native part of FileDescriptor class. |
| |
| /* Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| #include <config.h> |
| |
| #include <errno.h> |
| #include <string.h> |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <sys/param.h> |
| |
| #include <gcj/cni.h> |
| #include <jvm.h> |
| #include <java/io/FileDescriptor.h> |
| #include <java/io/SyncFailedException.h> |
| #include <java/io/IOException.h> |
| #include <java/io/EOFException.h> |
| #include <java/lang/ArrayIndexOutOfBoundsException.h> |
| #include <java/lang/NullPointerException.h> |
| #include <java/lang/String.h> |
| #include <java/io/FileNotFoundException.h> |
| #include <gnu/java/nio/MappedByteBufferImpl.h> |
| #include <java/nio/channels/FileChannel.h> |
| #include <java/nio/channels/FileLock.h> |
| #include <gnu/java/nio/channels/FileChannelImpl.h> |
| |
| using gnu::gcj::RawData; |
| using java::io::IOException; |
| using gnu::java::nio::MappedByteBufferImpl; |
| using java::io::InterruptedIOException; |
| using java::io::FileNotFoundException; |
| using java::lang::ArrayIndexOutOfBoundsException; |
| using java::lang::NullPointerException; |
| using gnu::java::nio::channels::FileChannelImpl; |
| |
| extern "C" void diag_write_char (char c); |
| |
| static void |
| diag_write (char *data, int len) |
| { |
| while (len > 0) |
| { |
| diag_write_char (*data++); |
| len--; |
| } |
| } |
| |
| #define NO_FSYNC_MESSAGE "sync unsupported" |
| |
| void |
| FileChannelImpl::init(void) |
| { |
| in = new FileChannelImpl((jint) 0, FileChannelImpl::READ); |
| out = new FileChannelImpl((jint) 1, FileChannelImpl::WRITE); |
| err = new FileChannelImpl((jint) 2, FileChannelImpl::WRITE); |
| } |
| |
| #if 0 |
| jboolean |
| FileChannelImpl::valid (void) |
| { |
| return true; |
| } |
| |
| void |
| FileChannelImpl::sync (void) |
| { |
| // Some files don't support fsync. We don't bother reporting these |
| // as errors. |
| #ifdef HAVE_FSYNC |
| #else |
| throw new SyncFailedException (JvNewStringLatin1 (NO_FSYNC_MESSAGE)); |
| #endif |
| } |
| #endif |
| |
| jint |
| FileChannelImpl::open (jstring, jint) |
| { |
| return fd; |
| } |
| |
| void |
| FileChannelImpl::write (jint) |
| { |
| char d = (char) b; |
| ::diag_write (&d, 1); |
| } |
| |
| void |
| FileChannelImpl::write (jbyteArray b, jint offset, jint len) |
| { |
| if (! b) |
| throw new NullPointerException; |
| if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) |
| throw new ArrayIndexOutOfBoundsException; |
| char *bytes = (char *)elements (b) + offset; |
| ::diag_write (bytes, len); |
| } |
| |
| void |
| FileChannelImpl::implCloseChannel (void) |
| { |
| } |
| |
| void |
| FileChannelImpl::implTruncate (jlong) |
| { |
| } |
| |
| void |
| FileChannelImpl::seek (jlong) |
| { |
| } |
| |
| jlong |
| FileChannelImpl::size (void) |
| { |
| return 0; |
| } |
| |
| jlong |
| FileChannelImpl::implPosition (void) |
| { |
| return 0; |
| } |
| |
| jint |
| FileChannelImpl::read (void) |
| { |
| return 0; |
| } |
| |
| jint |
| FileChannelImpl::read (jbyteArray buffer, jint offset, jint count) |
| { |
| return 0; |
| } |
| |
| jint |
| FileChannelImpl::available (void) |
| { |
| return 0; |
| } |
| |
| jboolean |
| FileChannelImpl::lock (jlong, jlong, jboolean, jboolean) |
| { |
| throw new IOException (JvNewStringLatin1 |
| ("gnu.java.nio.FileChannelImpl.lock() not implemented")); |
| } |
| |
| void |
| FileChannelImpl::unlock (jlong, jlong) |
| { |
| throw new IOException (JvNewStringLatin1 |
| ("gnu.java.nio.channels.FileChannelImpl.unlock() not implemented")); |
| } |
| |
| java::nio::MappedByteBuffer * |
| FileChannelImpl::mapImpl (jchar, jlong, jint) |
| { |
| return NULL; |
| } |
| |
| void |
| MappedByteBufferImpl::unmapImpl () |
| { |
| } |
| |
| void |
| MappedByteBufferImpl::loadImpl () |
| { |
| } |
| |
| jboolean |
| MappedByteBufferImpl::isLoadedImpl () |
| { |
| return true; |
| } |
| |
| void |
| MappedByteBufferImpl::forceImpl () |
| { |
| } |