// natFileDescriptor.cc - Native part of FileDescriptor class. /* Copyright (C) 1998, 1999 Cygnus Solutions 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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" jboolean java::io::FileDescriptor::valid (void) { return true; } void java::io::FileDescriptor::sync (void) { // Some files don't support fsync. We don't bother reporting these // as errors. #ifdef HAVE_FSYNC #else JvThrow (new SyncFailedException (JvNewStringLatin1 (NO_FSYNC_MESSAGE))); #endif } jint java::io::FileDescriptor::open (jstring path, jint jflags) { return fd; } void java::io::FileDescriptor::write (jint b) { char d = (char) b; ::diag_write (&d, 1); } void java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len) { if (! b) JvThrow (new java::lang::NullPointerException); if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) JvThrow (new java::lang::ArrayIndexOutOfBoundsException); char *bytes = (char *)elements (b) + offset; ::diag_write (bytes, len); } void java::io::FileDescriptor::close (void) { } jint java::io::FileDescriptor::seek (jlong pos, jint whence) { JvAssert (whence == SET || whence == CUR); jlong len = length (); jlong here = getFilePointer (); if ((whence == SET && pos > len) || (whence == CUR && here + pos > len)) JvThrow (new EOFException); return 0; } jlong java::io::FileDescriptor::length (void) { return 0; } jlong java::io::FileDescriptor::getFilePointer (void) { return 0; } jint java::io::FileDescriptor::read (void) { return 0; } jint java::io::FileDescriptor::read (jbyteArray buffer, jint offset, jint count) { return 0; } jint java::io::FileDescriptor::available (void) { return 0; }