xref: /linux/tools/include/nolibc/sys/sendfile.h (revision c0da8b53603ad84f622b2c5f6c1a69f7d4b4b8bc)
1 /* SPDX-License-Identifier: LGPL-2.1 OR MIT */
2 /*
3  * sendfile for NOLIBC
4  * Copyright (C) 2026 Daniel Palmer <daniel@thingy.jp>
5  */
6 
7 /* make sure to include all global symbols */
8 #include "../nolibc.h"
9 
10 #ifndef _NOLIBC_SYS_SENDFILE_H
11 #define _NOLIBC_SYS_SENDFILE_H
12 
13 #include "../sys.h"
14 #include <linux/unistd.h>
15 
16 /*
17  * ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
18  */
19 
20 static __attribute__((unused))
21 ssize_t _sys_sendfile(int out_fd, int in_fd, off_t *offset, size_t count)
22 {
23 	__nolibc_static_assert(sizeof(*offset) == sizeof(__kernel_loff_t));
24 
25 #ifdef __NR_sendfile64
26 	/* 32-bit applications use sendfile64 so offset is treated as a __kernel_loff_t */
27 	return __nolibc_syscall4(__NR_sendfile64, out_fd, in_fd, offset, count);
28 #else
29 	__nolibc_static_assert(sizeof(*offset) == sizeof(__kernel_off_t));
30 
31 	return __nolibc_syscall4(__NR_sendfile, out_fd, in_fd, offset, count);
32 #endif
33 }
34 
35 static __attribute__((unused))
36 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count)
37 {
38 	return __sysret(_sys_sendfile(out_fd, in_fd, offset, count));
39 }
40 
41 #endif /* _NOLIBC_SYS_SENDFILE_H */
42