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