| /* SPDX-License-Identifier: LGPL-2.1 OR MIT */ |
| /* |
| * fcntl definition for NOLIBC |
| * Copyright (C) 2017-2021 Willy Tarreau <w@1wt.eu> |
| */ |
| |
| /* make sure to include all global symbols */ |
| #include "nolibc.h" |
| |
| #ifndef _NOLIBC_FCNTL_H |
| #define _NOLIBC_FCNTL_H |
| |
| #include "arch.h" |
| #include "types.h" |
| #include "sys.h" |
| |
| /* |
| * int openat(int dirfd, const char *path, int flags[, mode_t mode]); |
| */ |
| |
| static __attribute__((unused)) |
| int sys_openat(int dirfd, const char *path, int flags, mode_t mode) |
| { |
| return my_syscall4(__NR_openat, dirfd, path, flags, mode); |
| } |
| |
| static __attribute__((unused)) |
| int openat(int dirfd, const char *path, int flags, ...) |
| { |
| mode_t mode = 0; |
| |
| if (flags & O_CREAT) { |
| va_list args; |
| |
| va_start(args, flags); |
| mode = va_arg(args, mode_t); |
| va_end(args); |
| } |
| |
| return __sysret(sys_openat(dirfd, path, flags, mode)); |
| } |
| |
| /* |
| * int open(const char *path, int flags[, mode_t mode]); |
| */ |
| |
| static __attribute__((unused)) |
| int sys_open(const char *path, int flags, mode_t mode) |
| { |
| return my_syscall4(__NR_openat, AT_FDCWD, path, flags, mode); |
| } |
| |
| static __attribute__((unused)) |
| int open(const char *path, int flags, ...) |
| { |
| mode_t mode = 0; |
| |
| if (flags & O_CREAT) { |
| va_list args; |
| |
| va_start(args, flags); |
| mode = va_arg(args, mode_t); |
| va_end(args); |
| } |
| |
| return __sysret(sys_open(path, flags, mode)); |
| } |
| |
| #endif /* _NOLIBC_FCNTL_H */ |