summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--libs/nixio/src/address.c1
-rw-r--r--libs/nixio/src/bind.c2
-rw-r--r--libs/nixio/src/file.c5
-rw-r--r--libs/nixio/src/io.c3
-rw-r--r--libs/nixio/src/splice.c29
5 files changed, 34 insertions, 6 deletions
diff --git a/libs/nixio/src/address.c b/libs/nixio/src/address.c
index 3d779fbe7..8b9ae2807 100644
--- a/libs/nixio/src/address.c
+++ b/libs/nixio/src/address.c
@@ -20,6 +20,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
+#include <netinet/in.h>
#include <string.h>
#include <netdb.h>
diff --git a/libs/nixio/src/bind.c b/libs/nixio/src/bind.c
index b636c0a44..785a28d5a 100644
--- a/libs/nixio/src/bind.c
+++ b/libs/nixio/src/bind.c
@@ -20,12 +20,12 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
+#include <netinet/in.h>
#include <sys/un.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>
-#include "nixio.h"
/**
* connect()/bind() shortcut
diff --git a/libs/nixio/src/file.c b/libs/nixio/src/file.c
index 5229b4988..2fe00c2a8 100644
--- a/libs/nixio/src/file.c
+++ b/libs/nixio/src/file.c
@@ -25,6 +25,7 @@
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/param.h>
static int nixio_open(lua_State *L) {
@@ -209,8 +210,12 @@ static int nixio_file_tell(lua_State *L) {
static int nixio_file_sync(lua_State *L) {
int fd = nixio__checkfd(L, 1);
+#ifndef BSD
int meta = lua_toboolean(L, 2);
return nixio__pstatus(L, (meta) ? !fsync(fd) : !fdatasync(fd));
+#else
+ return nixio__pstatus(L, !fsync(fd));
+#endif
}
static int nixio_file_lock(lua_State *L) {
diff --git a/libs/nixio/src/io.c b/libs/nixio/src/io.c
index 3727f8c02..0ce4fcc3a 100644
--- a/libs/nixio/src/io.c
+++ b/libs/nixio/src/io.c
@@ -23,8 +23,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
-#include "nixio.h"
-
+#include <netinet/in.h>
/**
diff --git a/libs/nixio/src/splice.c b/libs/nixio/src/splice.c
index 0519f719a..c7aa817af 100644
--- a/libs/nixio/src/splice.c
+++ b/libs/nixio/src/splice.c
@@ -25,7 +25,14 @@
#include <string.h>
#include <errno.h>
#include <unistd.h>
+
+#ifndef BSD
#include <sys/sendfile.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#endif
#ifdef _GNU_SOURCE
@@ -102,15 +109,31 @@ static int nixio_splice_flags(lua_State *L) {
* sendfile(outfd, infd, length)
*/
static int nixio_sendfile(lua_State *L) {
- int sockfd = nixio__checksockfd(L);
+ int sock = nixio__checksockfd(L);
int infd = nixio__checkfd(L, 2);
size_t len = luaL_checkinteger(L, 3);
+ off_t spliced;
- long spliced = sendfile(sockfd, infd, NULL, len);
+#ifndef BSD
+ do {
+ spliced = sendfile(sock, infd, NULL, len);
+ } while (spliced == -1 && errno == EINTR);
- if (spliced < 0) {
+ if (spliced == -1) {
return nixio__perror(L);
}
+#else
+ int r;
+ const off_t offset = lseek(infd, 0, SEEK_CUR);
+
+ do {
+ r = sendfile(infd, sock, offset, len, NULL, &spliced, 0);
+ } while (r == -1 && errno == EINTR);
+
+ if (r == -1) {
+ return nixio__perror(L);
+ }
+#endif
lua_pushnumber(L, spliced);
return 1;