nixio: FreeBSD compatibility #2
authorSteven Barth <steven@midlink.org>
Thu, 12 Mar 2009 14:53:52 +0000 (14:53 +0000)
committerSteven Barth <steven@midlink.org>
Thu, 12 Mar 2009 14:53:52 +0000 (14:53 +0000)
libs/nixio/src/address.c
libs/nixio/src/bind.c
libs/nixio/src/file.c
libs/nixio/src/io.c
libs/nixio/src/splice.c

index 3d779fb..8b9ae28 100644 (file)
@@ -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>
 
index b636c0a..785a28d 100644 (file)
 #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
index 5229b49..2fe00c2 100644 (file)
@@ -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) {
index 3727f8c..0ce4fcc 100644 (file)
@@ -23,8 +23,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
-#include "nixio.h"
-
+#include <netinet/in.h>
 
 
 /**
index 0519f71..c7aa817 100644 (file)
 #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;