< 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 >