projects/linux·blob master · refs

41 lines · 1.1 KiB

1/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
2/*
3 * sendfile for NOLIBC
4 * Copyright (C) 2026 Daniel Palmer <[email protected]>
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
20static __attribute__((unused))
21ssize_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
35static __attribute__((unused))
36ssize_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 */