< prev index next >
src/java.base/unix/native/libjava/RandomAccessFile_md.c
Print this page
@@ -35,14 +35,71 @@
#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 >