--- a/src/java.base/unix/native/libnio/ch/FileDispatcherImpl.c Thu Apr 26 12:25:36 2018 +0530
+++ b/src/java.base/unix/native/libnio/ch/FileDispatcherImpl.c Thu Apr 26 09:04:18 2018 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,40 +23,42 @@
* questions.
*/
-#include "jni.h"
-#include "jni_util.h"
-#include "jvm.h"
-#include "jlong.h"
-#include "sun_nio_ch_FileDispatcherImpl.h"
-#include "java_lang_Long.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <unistd.h>
+#include <sys/stat.h>
#include <sys/statvfs.h>
+
#if defined(__linux__)
#include <linux/fs.h>
#include <sys/ioctl.h>
#endif
-#include "nio.h"
-#include "nio_util.h"
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE)
+#define lseek64 lseek
#define stat64 stat
#define flock64 flock
#define off64_t off_t
#define F_SETLKW64 F_SETLKW
#define F_SETLK64 F_SETLK
-
#define pread64 pread
#define pwrite64 pwrite
#define ftruncate64 ftruncate
#define fstat64 fstat
-
#define fdatasync fsync
#endif
+#include "jni.h"
+#include "jni_util.h"
+#include "jvm.h"
+#include "jlong.h"
+#include "nio.h"
+#include "nio_util.h"
+#include "sun_nio_ch_FileDispatcherImpl.h"
+#include "java_lang_Long.h"
+
static int preCloseFD = -1; /* File descriptor to which we dup other fd's
before closing them for real */
@@ -142,6 +144,20 @@
return IOS_THROWN;
}
+JNIEXPORT jlong JNICALL
+Java_sun_nio_ch_FileDispatcherImpl_seek0(JNIEnv *env, jclass clazz,
+ jobject fdo, jlong offset)
+{
+ jint fd = fdval(env, fdo);
+ off64_t result;
+ if (offset < 0) {
+ result = lseek64(fd, 0, SEEK_CUR);
+ } else {
+ result = lseek64(fd, offset, SEEK_SET);
+ }
+ return handle(env, (jlong)result, "lseek64 failed");
+}
+
JNIEXPORT jint JNICALL
Java_sun_nio_ch_FileDispatcherImpl_force0(JNIEnv *env, jobject this,
jobject fdo, jboolean md)
@@ -187,30 +203,6 @@
"Truncation failed");
}
-JNIEXPORT jint JNICALL
-Java_sun_nio_ch_FileDispatcherImpl_allocate0(JNIEnv *env, jobject this,
- jobject fdo, jlong size)
-{
-#if defined(__linux__)
- /*
- * On Linux, if the file size is being increased, then ftruncate64()
- * will modify the metadata value of the size without actually allocating
- * any blocks which can cause a SIGBUS error if the file is subsequently
- * memory-mapped.
- */
- // Return on success or if errno is neither EOPNOTSUPP nor ENOSYS
- int result = fallocate64(fdval(env, fdo), 0, 0, size);
- if (result == 0) {
- return 0;
- } else if (errno != EOPNOTSUPP && errno != ENOSYS) {
- return handle(env, result, "Allocation failed");
- }
-#endif
- return handle(env,
- ftruncate64(fdval(env, fdo), size),
- "Truncation failed");
-}
-
JNIEXPORT jlong JNICALL
Java_sun_nio_ch_FileDispatcherImpl_size0(JNIEnv *env, jobject this, jobject fdo)
{