xref: /linux/tools/include/nolibc/fcntl.h (revision 015a99fa76650e7d6efa3e36f20c0f5b346fe9ce)
1ecc091d9SThomas Weißschuh /* SPDX-License-Identifier: LGPL-2.1 OR MIT */
2ecc091d9SThomas Weißschuh /*
3ecc091d9SThomas Weißschuh  * fcntl definition for NOLIBC
4ecc091d9SThomas Weißschuh  * Copyright (C) 2017-2021 Willy Tarreau <w@1wt.eu>
5ecc091d9SThomas Weißschuh  */
6ecc091d9SThomas Weißschuh 
7*3785289fSThomas Weißschuh /* make sure to include all global symbols */
8*3785289fSThomas Weißschuh #include "nolibc.h"
9*3785289fSThomas Weißschuh 
10ecc091d9SThomas Weißschuh #ifndef _NOLIBC_FCNTL_H
11ecc091d9SThomas Weißschuh #define _NOLIBC_FCNTL_H
12ecc091d9SThomas Weißschuh 
13ecc091d9SThomas Weißschuh #include "arch.h"
14ecc091d9SThomas Weißschuh #include "types.h"
15ecc091d9SThomas Weißschuh #include "sys.h"
16ecc091d9SThomas Weißschuh 
17ecc091d9SThomas Weißschuh /*
18ecc091d9SThomas Weißschuh  * int openat(int dirfd, const char *path, int flags[, mode_t mode]);
19ecc091d9SThomas Weißschuh  */
20ecc091d9SThomas Weißschuh 
21ecc091d9SThomas Weißschuh static __attribute__((unused))
sys_openat(int dirfd,const char * path,int flags,mode_t mode)22ecc091d9SThomas Weißschuh int sys_openat(int dirfd, const char *path, int flags, mode_t mode)
23ecc091d9SThomas Weißschuh {
24ecc091d9SThomas Weißschuh 	return my_syscall4(__NR_openat, dirfd, path, flags, mode);
25ecc091d9SThomas Weißschuh }
26ecc091d9SThomas Weißschuh 
27ecc091d9SThomas Weißschuh static __attribute__((unused))
openat(int dirfd,const char * path,int flags,...)28ecc091d9SThomas Weißschuh int openat(int dirfd, const char *path, int flags, ...)
29ecc091d9SThomas Weißschuh {
30ecc091d9SThomas Weißschuh 	mode_t mode = 0;
31ecc091d9SThomas Weißschuh 
32ecc091d9SThomas Weißschuh 	if (flags & O_CREAT) {
33ecc091d9SThomas Weißschuh 		va_list args;
34ecc091d9SThomas Weißschuh 
35ecc091d9SThomas Weißschuh 		va_start(args, flags);
36ecc091d9SThomas Weißschuh 		mode = va_arg(args, mode_t);
37ecc091d9SThomas Weißschuh 		va_end(args);
38ecc091d9SThomas Weißschuh 	}
39ecc091d9SThomas Weißschuh 
40ecc091d9SThomas Weißschuh 	return __sysret(sys_openat(dirfd, path, flags, mode));
41ecc091d9SThomas Weißschuh }
42ecc091d9SThomas Weißschuh 
43ecc091d9SThomas Weißschuh /*
44ecc091d9SThomas Weißschuh  * int open(const char *path, int flags[, mode_t mode]);
45ecc091d9SThomas Weißschuh  */
46ecc091d9SThomas Weißschuh 
47ecc091d9SThomas Weißschuh static __attribute__((unused))
sys_open(const char * path,int flags,mode_t mode)48ecc091d9SThomas Weißschuh int sys_open(const char *path, int flags, mode_t mode)
49ecc091d9SThomas Weißschuh {
50ecc091d9SThomas Weißschuh 	return my_syscall4(__NR_openat, AT_FDCWD, path, flags, mode);
51ecc091d9SThomas Weißschuh }
52ecc091d9SThomas Weißschuh 
53ecc091d9SThomas Weißschuh static __attribute__((unused))
open(const char * path,int flags,...)54ecc091d9SThomas Weißschuh int open(const char *path, int flags, ...)
55ecc091d9SThomas Weißschuh {
56ecc091d9SThomas Weißschuh 	mode_t mode = 0;
57ecc091d9SThomas Weißschuh 
58ecc091d9SThomas Weißschuh 	if (flags & O_CREAT) {
59ecc091d9SThomas Weißschuh 		va_list args;
60ecc091d9SThomas Weißschuh 
61ecc091d9SThomas Weißschuh 		va_start(args, flags);
62ecc091d9SThomas Weißschuh 		mode = va_arg(args, mode_t);
63ecc091d9SThomas Weißschuh 		va_end(args);
64ecc091d9SThomas Weißschuh 	}
65ecc091d9SThomas Weißschuh 
66ecc091d9SThomas Weißschuh 	return __sysret(sys_open(path, flags, mode));
67ecc091d9SThomas Weißschuh }
68ecc091d9SThomas Weißschuh 
69ecc091d9SThomas Weißschuh #endif /* _NOLIBC_FCNTL_H */
70