]> arthur.barton.de Git - netatalk.git/commitdiff
FreeBSD sendfile fixes
authorFrank Lahm <franklahm@googlemail.com>
Wed, 11 May 2011 20:40:10 +0000 (22:40 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Wed, 11 May 2011 20:40:10 +0000 (22:40 +0200)
libatalk/adouble/ad_sendfile.c
libatalk/dsi/dsi_stream.c

index 20453bfd601404e94f344955aa17afb699aef3bb..c8cba8cca31f3ea96a6d228b9e238c07d9f0c170 100644 (file)
@@ -62,24 +62,12 @@ ssize_t sys_sendfile(int tofd, int fromfd, off_t *offset, size_t count)
 }
 
 #elif defined(SENDFILE_FLAVOR_BSD )
-#include <sys/sendfile.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h><
 ssize_t sys_sendfile(int tofd, int fromfd, off_t *offset, size_t count)
 {
-size_t total=0;
-int    ret;
-
-    total = count;
-    while (total) {
-        ssize_t nwritten;
-        do {
-           ret = sendfile(fromfd, tofd, offset, count, NULL, &nwritten, 0);
-        while (ret == -1 && errno == EINTR);
-        if (ret == -1)
-            return -1;
-        total -= nwritten;
-        offset += nwritten;
-    }
-    return count;
+  return sendfile(fromfd, tofd, *offset, count, NULL, offset, 0);
 }
 
 #else
index c709f2166fc8972e6a693fabc98fd535aab6663e..bc84a5fa2bb47849ac5cc2129116e5ad2f137aba 100644 (file)
@@ -342,7 +342,7 @@ ssize_t dsi_stream_read_file(DSI *dsi, int fromfd, off_t offset, const size_t le
           goto exit;
       }          
       if (errno == EAGAIN || errno == EWOULDBLOCK) {
-#ifdef SOLARIS
+#if defined(SOLARIS) || defined(FREEBSD)
           if (pos > offset) {
               /* we actually have sent sth., adjust counters and keep trying */
               len = pos - offset;