Added
Link Here
|
1 |
--- src/lib/sendfile.c.orig 2018-02-19 22:24:10 UTC |
2 |
+++ src/lib/sendfile.c |
3 |
@@ -38,6 +38,7 @@ int sendfile(int, int, off_t, off_t *, void *, int); |
4 |
#endif |
5 |
|
6 |
#include <stdlib.h> |
7 |
+#include <errno.h> |
8 |
|
9 |
DSO_PUBLIC ssize_t |
10 |
lfp_sendfile(int out_fd, int in_fd, off_t offset, size_t nbytes) |
11 |
@@ -46,18 +47,21 @@ lfp_sendfile(int out_fd, int in_fd, off_t offset, size |
12 |
# if defined(__linux__) |
13 |
off_t off = offset; |
14 |
return (ssize_t) sendfile(out_fd, in_fd, &off, nbytes); |
15 |
-# elif defined(__FreeBSD__) |
16 |
- return (ssize_t) sendfile(in_fd, out_fd, offset, nbytes, NULL, NULL, SF_MNOWAIT); |
17 |
-# elif defined(__DragonFly__) |
18 |
- return (ssize_t) sendfile(in_fd, out_fd, offset, nbytes, NULL, NULL, 0); |
19 |
+# elif defined(__FreeBSD__) || defined(__DragonFly__) |
20 |
+ off_t sbytes; |
21 |
+ int res = sendfile(in_fd, out_fd, offset, nbytes, NULL, &sbytes, 0); |
22 |
+ if (res == 0) { return sbytes; } |
23 |
+ return res; |
24 |
# elif defined(__APPLE__) |
25 |
off_t len = nbytes; |
26 |
- return (ssize_t) sendfile(in_fd, out_fd, offset, &len, NULL, 0); |
27 |
+ int res = sendfile(in_fd, out_fd, offset, &len, NULL, 0); |
28 |
+ if (res == 0) { return len; } |
29 |
+ return -1; |
30 |
# else |
31 |
# error "It appears that this OS has sendfile(), but LFP doesn't use it at the moment" |
32 |
# error "Please send an email to iolib-devel@common-lisp.net" |
33 |
# endif |
34 |
#else |
35 |
- return ENOSYS; |
36 |
+ SYSERR(ENOSYS); |
37 |
#endif |
38 |
} |