Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Mon, 19 Aug 2019 23:41:14 +0000
From: Árni Dagur <arni@...ur.eu>
To: musl@...ts.openwall.com
Cc: Árni Dagur <arni@...ur.eu>
Subject: [PATCH] Add copy_file_range system call

This patch was based on commit 53147f9, which added splice and vmsplice.
---
 The function signature in the glibc manpage specifies `loff_t` instead
 of `off_t`, for both `copy_file_range` and `splice`. In musl, however, 
 the function signature for `splice` specifies `off_t`, so I did the
 same here. I'm not an experienced C programmer, so that may have been
 wrong.

 include/unistd.h            | 1 +
 src/linux/copy_file_range.c | 8 ++++++++
 2 files changed, 9 insertions(+)
 create mode 100644 src/linux/copy_file_range.c

diff --git a/include/unistd.h b/include/unistd.h
index 9485da7a..00cc7042 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -188,6 +188,7 @@ char *get_current_dir_name(void);
 int syncfs(int);
 int euidaccess(const char *, int);
 int eaccess(const char *, int);
+ssize_t copy_file_range(int fd_in, off_t *off_in, int fd_out, off_t *off_out, size_t len, unsigned flags);
 #endif
 
 #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
diff --git a/src/linux/copy_file_range.c b/src/linux/copy_file_range.c
new file mode 100644
index 00000000..34742588
--- /dev/null
+++ b/src/linux/copy_file_range.c
@@ -0,0 +1,8 @@
+#define _GNU_SOURCE
+#include <fcntl.h>
+#include "syscall.h"
+
+ssize_t copy_file_range(int fd_in, off_t *off_in, int fd_out, off_t *off_out, size_t len, unsigned flags)
+{
+	return syscall(SYS_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags);
+}
-- 
2.23.0

Powered by blists - more mailing lists

Your e-mail address:

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.