< prev index next >

src/java.base/unix/native/libjava/RandomAccessFile_md.c

Print this page

        

*** 35,48 **** --- 35,105 ---- #include "io_util_md.h" #include "java_io_RandomAccessFile.h" extern jfieldID raf_fd; /* id for jobject 'fd' in java.io.RandomAccessFile */ + extern jfieldID raf_pgsz; /* id for jobject 'fd' in java.io.RandomAccessFile */ /********************************************************************* * Platform specific implementation of input stream native methods */ JNIEXPORT void JNICALL Java_java_io_RandomAccessFile_close0(JNIEnv *env, jobject this) { fileClose(env, this, raf_fd); } + + JNIEXPORT void JNICALL + Java_java_io_RandomAccessFile_open0(JNIEnv *env, + jobject this, jstring path, jint mode) + { + int flags = 0; + if (mode & java_io_RandomAccessFile_O_RDONLY) { + flags = O_RDONLY; + if (mode & java_io_RandomAccessFile_O_DIRECT) + flags |= O_DIRECT; + } + else if (mode & java_io_RandomAccessFile_O_RDWR) { + flags = O_RDWR | O_CREAT; + if (mode & java_io_RandomAccessFile_O_SYNC) + flags |= O_SYNC; + else if (mode & java_io_RandomAccessFile_O_DSYNC) + flags |= O_DSYNC; + else if (mode & java_io_RandomAccessFile_O_DIRECT) + flags |= O_DIRECT; + } + fileOpen(env, this, path, raf_fd, flags); + } + + JNIEXPORT jlong JNICALL + Java_java_io_RandomAccessFile_getCurrentLocation0(JNIEnv *env, jobject this) { + + FD fd; + + fd = GET_FD(this, raf_fd); + if (fd == -1) { + JNU_ThrowIOException(env, "Stream Closed"); + return -1; + } + jlong currentLocation = IO_Lseek(fd, 0, SEEK_CUR); + if (currentLocation == -1) { + JNU_ThrowIOExceptionWithLastError(env, "Seek failed"); + } + return currentLocation; + } + + JNIEXPORT jint JNICALL + Java_java_io_RandomAccessFile_getPageSize0(JNIEnv *env, jobject this) { + return getpagesize(); + } + + JNIEXPORT jint JNICALL + Java_java_io_RandomAccessFile_readBytesD(JNIEnv *env, + jobject this, jbyteArray bytes, jint off, jint len) { + return readBytesD(env, this, bytes, off, len, raf_fd, raf_pgsz); + } + + JNIEXPORT void JNICALL + Java_java_io_RandomAccessFile_writeBytesD(JNIEnv *env, + jobject this, jbyteArray bytes, jint off, jint len) { + writeBytesD(env, this, bytes, off, len, JNI_FALSE, raf_fd, raf_pgsz); + }
< prev index next >