--- 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