diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-07-23 16:50:56 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-07-23 16:50:56 -0400 |
commit | 53147f902b7f84d8108bd9738641a53722a4a205 (patch) | |
tree | 6fbf24617ba8a13af52da8713a49f9d1e052d402 | |
parent | 207460d09742304941f1a010a89fc2efa46bcb29 (diff) | |
download | musl-53147f902b7f84d8108bd9738641a53722a4a205.tar.gz |
add splice and vmsplice syscalls
based on patches by orc and Isaac Dunham.
-rw-r--r-- | include/fcntl.h | 12 | ||||
-rw-r--r-- | src/linux/splice.c | 8 | ||||
-rw-r--r-- | src/linux/vmsplice.c | 8 |
3 files changed, 28 insertions, 0 deletions
diff --git a/include/fcntl.h b/include/fcntl.h index fcb622a2..f0e5671e 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -9,6 +9,12 @@ extern "C" { #define __NEED_pid_t #define __NEED_mode_t +#ifdef _GNU_SOURCE +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_struct_iovec +#endif + #include <bits/alltypes.h> #include <bits/fcntl.h> @@ -108,6 +114,12 @@ struct f_owner_ex { int type; pid_t pid; }; +#define SPLICE_F_MOVE 1 +#define SPLICE_F_NONBLOCK 2 +#define SPLICE_F_MORE 4 +#define SPLICE_F_GIFT 8 +ssize_t vmsplice(int, const struct iovec *, size_t, unsigned); +ssize_t splice(int, off_t *, int, off_t *, size_t, unsigned); #endif #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) diff --git a/src/linux/splice.c b/src/linux/splice.c new file mode 100644 index 00000000..78b6220d --- /dev/null +++ b/src/linux/splice.c @@ -0,0 +1,8 @@ +#define _GNU_SOURCE +#include <fcntl.h> +#include "syscall.h" + +ssize_t splice(int fd_in, off_t *off_in, int fd_out, off_t *off_out, size_t len, unsigned flags) +{ + return syscall(SYS_splice, fd_in, off_in, fd_out, off_out, len, flags); +} diff --git a/src/linux/vmsplice.c b/src/linux/vmsplice.c new file mode 100644 index 00000000..ebf13ee4 --- /dev/null +++ b/src/linux/vmsplice.c @@ -0,0 +1,8 @@ +#define _GNU_SOURCE +#include <fcntl.h> +#include "syscall.h" + +ssize_t vmsplice(int fd, const struct iovec *iov, size_t cnt, unsigned flags) +{ + return syscall(SYS_vmsplice, fd, iov, cnt, flags); +} |