Added
Link Here
|
1 |
changes `lfp_sendfile' so it returns the number of bytes sent, |
2 |
mimicking Linux sendfile(2). |
3 |
|
4 |
Submited to upstream by Vasily Postnicov (shamaz.mazum@gmail.com), |
5 |
see https://github.com/sionescu/libfixposix/pull/18. |
6 |
|
7 |
--- src/lib/sendfile.c.orig 2018-02-19 22:24:10 UTC |
8 |
+++ src/lib/sendfile.c |
9 |
@@ -38,6 +38,9 @@ int sendfile(int, int, off_t, off_t *, void *, int); |
10 |
#endif |
11 |
|
12 |
#include <stdlib.h> |
13 |
+# if defined(__FreeBSD__) || defined(__DragonFly__) |
14 |
+#include <errno.h> |
15 |
+# endif |
16 |
|
17 |
DSO_PUBLIC ssize_t |
18 |
lfp_sendfile(int out_fd, int in_fd, off_t offset, size_t nbytes) |
19 |
@@ -46,8 +49,13 @@ lfp_sendfile(int out_fd, int in_fd, off_t offset, size |
20 |
# if defined(__linux__) |
21 |
off_t off = offset; |
22 |
return (ssize_t) sendfile(out_fd, in_fd, &off, nbytes); |
23 |
-# elif defined(__FreeBSD__) |
24 |
- return (ssize_t) sendfile(in_fd, out_fd, offset, nbytes, NULL, NULL, SF_MNOWAIT); |
25 |
+# elif defined(__FreeBSD__) || defined(__DragonFly__) |
26 |
+ off_t sbytes; |
27 |
+ int res = sendfile(in_fd, out_fd, offset, nbytes, NULL, &sbytes, 0); |
28 |
+ if (res == -1 && errno == EAGAIN) |
29 |
+ res = 0; |
30 |
+ if (res == 0) res = sbytes; |
31 |
+ return res; |
32 |
# elif defined(__DragonFly__) |
33 |
return (ssize_t) sendfile(in_fd, out_fd, offset, nbytes, NULL, NULL, 0); |
34 |
# elif defined(__APPLE__) |