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