src/server/util/io.c

changeset 112
b962d83124bc
parent 110
43a746e905f6
parent 111
c93be34fde76
child 126
631aaa01b2b5
--- a/src/server/util/io.c	Tue Nov 10 21:11:06 2015 +0100
+++ b/src/server/util/io.c	Tue Nov 10 21:18:51 2015 +0100
@@ -34,8 +34,14 @@
 #include <stdlib.h>
 #include <sys/uio.h>
 #include <sys/uio.h>
+
 #ifndef BSD
 #include <sys/sendfile.h>
+#else
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+#define WS_NO_SENDFILE
+#define net_sys_sendfile net_fallback_sendfile
+#endif
 #endif
 
 #include "../daemon/vfs.h"
@@ -95,6 +101,7 @@
     return read(st->fd, buf, nbytes);
 }
 
+#ifndef WS_NO_SENDFILE
 ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd) {
     ssize_t ret = 0;
     off_t fileoffset = sfd->offset;
@@ -141,6 +148,7 @@
     
     return ret;
 }
+#endif
 
 void net_sys_close(SysStream *st) {
     close(st->fd);
@@ -241,10 +249,11 @@
 
 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd) {  
     ssize_t ret = 0;
+    // TODO: support chunked transfer encoding
     if(st->fd->sendfile) {
         ret = st->fd->sendfile(st->fd, sfd);
     } else {
-        
+        ret = net_fallback_sendfile((IOStream*)st, sfd);
     }
     
     return ret;
@@ -347,13 +356,13 @@
     } else {
         // stream/file does not support sendfile
         // do regular copy
-        return net_copy_file(out, sfd);
+        return net_fallback_sendfile(out, sfd);
     }
     return IO_ERROR;
 }
 
 // private
-ssize_t net_copy_file(IOStream *fd, sendfiledata *sfd) {
+ssize_t net_fallback_sendfile(IOStream *fd, sendfiledata *sfd) {
     char *buf = malloc(4096);
     if(!buf) {
         // TODO: out of memory error

mercurial