src/server/util/io.c

changeset 71
069c152f6272
parent 70
4e6e812c1d97
child 80
0de4a90979e1
--- a/src/server/util/io.c	Thu Jun 20 14:07:46 2013 +0200
+++ b/src/server/util/io.c	Fri Jun 21 12:10:44 2013 +0200
@@ -95,7 +95,7 @@
         struct iovec io[2];
         char chunk_len[16];
         io[0].iov_base = chunk_len;
-        io[0].iov_len = snprintf(chunk_len, 16, "\n%zx\r\n", nbytes);
+        io[0].iov_len = snprintf(chunk_len, 16, "\r\n%zx\r\n", nbytes);
         io[1].iov_base = buf;
         io[1].iov_len = nbytes;
         ssize_t r = writev(st->fd, io, 2);
@@ -114,7 +114,7 @@
         for(int i=0;i<iovcnt;i++) {
             len += iovec[i].iov_len;
         }
-        io[0].iov_len = snprintf(chunk_len, 16, "\n%zx\r\n", len);
+        io[0].iov_len = snprintf(chunk_len, 16, "\r\n%zx\r\n", len);
         memcpy(io + 1, iovec, iovcnt * sizeof(struct iovec));
         ssize_t r = writev(st->fd, io, iovcnt + 1);
         return r - io[0].iov_len;
@@ -137,7 +137,7 @@
     ssize_t ret = 0;
     off_t fileoffset = sfd->offset;
     if(sfd->fd->fd != -1) {
-#ifdef OSX
+#ifdef BSD
         struct iovec hdvec;
         hdvec.iov_base = (void*)sfd->header;
         hdvec.iov_len = sfd->hlen;
@@ -151,8 +151,19 @@
         hdtr.trl_cnt = 1;
         
         off_t len = sfd->len;
-        ret = sendfile(sfd->fd->fd, st->fd, sfd->offset, &len, &hdtr, 0);
-#else
+#ifdef OSX
+        ret = sendfile(sfd->fd->fd, st->fd, fileoffset, &len, &hdtr, 0);
+#else // BSD
+        ret = sendfile(
+                sfd->fd->fd,
+                st->fd,
+                fileoffset,
+                sfd->len,
+                &hdtr,
+                NULL,
+                0);
+#endif
+#else // Solaris/Linux
         ret = sendfile(st->fd, sfd->fd->fd, &fileoffset, sfd->len);
 #endif
     } else {

mercurial