diff --git a/transport-native-epoll/pom.xml b/transport-native-epoll/pom.xml
index c5b0c84604..20ccbea8ac 100644
--- a/transport-native-epoll/pom.xml
+++ b/transport-native-epoll/pom.xml
@@ -186,7 +186,7 @@
${linux.sendmmsg.support}${glibc.sendmmsg.support}
.*IO_NETTY_SENDMSSG_NOT_FOUND.*
- CFLAGS=-O3 -DIO_NETTY_SENDMMSG_NOT_FOUND
+ CFLAGS=-O3 -DIO_NETTY_SENDMMSG_NOT_FOUND -Werror
false
@@ -202,7 +202,7 @@
${jni.compiler.args}
^((?!CFLAGS=).)*$
- CFLAGS=-O3
+ CFLAGS=-O3 -Werror
false
diff --git a/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c b/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c
index 863ce85dc6..59ee8f741a 100644
--- a/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c
+++ b/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.c
@@ -33,6 +33,7 @@
#include
#include
#include
+#include
#include "io_netty_channel_epoll_Native.h"
#include "exception_helper.h"
@@ -1057,6 +1058,8 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_shutdown0(JNIEnv* env,
mode = SHUT_RD;
} else if (write) {
mode = SHUT_WR;
+ } else {
+ return -EINVAL;
}
if (shutdown(fd, mode) < 0) {
return -errno;
@@ -1097,12 +1100,14 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_bind(JNIEnv* env, jcla
if (bind(fd, (struct sockaddr*) &addr, sizeof(addr)) == -1) {
return -errno;
}
+ return 0;
}
JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_listen0(JNIEnv* env, jclass clazz, jint fd, jint backlog) {
if (listen(fd, backlog) == -1) {
return -errno;
}
+ return 0;
}
JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_connect(JNIEnv* env, jclass clazz, jint fd, jbyteArray address, jint scopeId, jint port) {
@@ -1560,7 +1565,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_socketDomain(JNIEnv* e
// macro to calculate the length of a sockaddr_un struct for a given path length.
// see sys/un.h#SUN_LEN, this is modified to allow nul bytes
-#define _UNIX_ADDR_LENGTH(path_len) (((struct sockaddr_un *) 0)->sun_path) + path_len
+#define _UNIX_ADDR_LENGTH(path_len) (uintptr_t) (((struct sockaddr_un *) 0)->sun_path) + path_len
JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_bindDomainSocket(JNIEnv* env, jclass clazz, jint fd, jbyteArray socketPath) {
struct sockaddr_un addr;
@@ -1568,7 +1573,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_bindDomainSocket(JNIEn
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
- const jbyte* socket_path = (*env)->GetByteArrayElements(env, socketPath, 0);
+ jbyte* socket_path = (*env)->GetByteArrayElements(env, socketPath, 0);
jint socket_path_len = (*env)->GetArrayLength(env, socketPath);
if (socket_path_len > sizeof(addr.sun_path)) {
socket_path_len = sizeof(addr.sun_path);
@@ -1595,7 +1600,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_connectDomainSocket(JN
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
- const jbyte* socket_path = (*env)->GetByteArrayElements(env, socketPath, 0);
+ jbyte* socket_path = (*env)->GetByteArrayElements(env, socketPath, 0);
socket_path_len = (*env)->GetArrayLength(env, socketPath);
if (socket_path_len > sizeof(addr.sun_path)) {
socket_path_len = sizeof(addr.sun_path);
@@ -1685,7 +1690,7 @@ JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_sendFd0(JNIEnv* env, j
iov[0].iov_base = iovecData;
iov[0].iov_len = sizeof(iovecData);
- size_t res;
+ ssize_t res;
int err;
do {
res = sendmsg(socketFd, &descriptorMessage, 0);
@@ -1758,14 +1763,17 @@ JNIEXPORT jlong JNICALL Java_io_netty_channel_epoll_Native_pipe0(JNIEnv* env, jc
return (((long) fd[0]) << 32) | (fd[1] & 0xffffffffL);
}
-JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_splice0(JNIEnv* env, jclass clazz, jint fd, jint offIn, jint fdOut, jint offOut, jint len) {
+JNIEXPORT jint JNICALL Java_io_netty_channel_epoll_Native_splice0(JNIEnv* env, jclass clazz, jint fd, jlong offIn, jint fdOut, jlong offOut, jlong len) {
ssize_t res;
int err;
- loff_t off_in = offIn >= 0 ? (loff_t) offIn : NULL;
- loff_t off_out = offOut >= 0 ? (loff_t) offOut : NULL;
+ loff_t off_in = (loff_t) offIn;
+ loff_t off_out = (loff_t) offOut;
+
+ loff_t* p_off_in = off_in >= 0 ? &off_in : NULL;
+ loff_t* p_off_out = off_in >= 0 ? &off_out : NULL;
do {
- res = splice(fd, off_in, fdOut, off_out, (size_t) len, SPLICE_F_NONBLOCK | SPLICE_F_MOVE);
+ res = splice(fd, p_off_in, fdOut, p_off_out, (size_t) len, SPLICE_F_NONBLOCK | SPLICE_F_MOVE);
// keep on splicing if it was interrupted
} while (res == -1 && ((err = errno) == EINTR));
diff --git a/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.h b/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.h
index 1e0dd968da..16e88cf92f 100644
--- a/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.h
+++ b/transport-native-epoll/src/main/c/io_netty_channel_epoll_Native.h
@@ -130,7 +130,7 @@ jint Java_io_netty_channel_epoll_Native_sizeofEpollEvent(JNIEnv* env, jclass cla
jint Java_io_netty_channel_epoll_Native_offsetofEpollData(JNIEnv* env, jclass clazz);
jlong Java_io_netty_channel_epoll_Native_pipe0(JNIEnv* env, jclass clazz);
-jint Java_io_netty_channel_epoll_Native_splice0(JNIEnv* env, jclass clazz, jint fd, jint offIn, jint fdOut, jint offOut, jint len);
+jint Java_io_netty_channel_epoll_Native_splice0(JNIEnv* env, jclass clazz, jint fd, jlong offIn, jint fdOut, jlong offOut, jlong len);
jint Java_io_netty_channel_epoll_Native_tcpMd5SigMaxKeyLen(JNIEnv* env, jclass clazz);
void Java_io_netty_channel_epoll_Native_setTcpMd5Sig0(JNIEnv* env, jclass clazz, jint fd, jbyteArray address, jint scopeId, jbyteArray key);
diff --git a/transport-native-epoll/src/main/java/io/netty/channel/epoll/Native.java b/transport-native-epoll/src/main/java/io/netty/channel/epoll/Native.java
index 54d6976952..b1a75e154c 100644
--- a/transport-native-epoll/src/main/java/io/netty/channel/epoll/Native.java
+++ b/transport-native-epoll/src/main/java/io/netty/channel/epoll/Native.java
@@ -205,7 +205,7 @@ public final class Native {
private static native int close0(int fd);
- public static int splice(int fd, int offIn, int fdOut, int offOut, int len) throws IOException {
+ public static int splice(int fd, long offIn, int fdOut, long offOut, long len) throws IOException {
int res = splice0(fd, offIn, fdOut, offOut, len);
if (res >= 0) {
return res;
@@ -213,7 +213,7 @@ public final class Native {
return ioResult("splice", res, CONNECTION_RESET_EXCEPTION_SPLICE);
}
- private static native int splice0(int fd, int offIn, int fdOut, int offOut, int len);
+ private static native int splice0(int fd, long offIn, int fdOut, long offOut, long len);
public static long pipe() throws IOException {
long res = pipe0();