--- old/src/java.base/unix/native/libjava/RandomAccessFile_md.c 2016-08-25 17:51:54.659564705 -0700 +++ new/src/java.base/unix/native/libjava/RandomAccessFile_md.c 2016-08-25 17:51:54.554564704 -0700 @@ -37,6 +37,7 @@ #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 @@ -46,3 +47,59 @@ 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); +}