/* SPDX-License-Identifier: LGPL-2.1 OR MIT */ /* * fcntl definition for NOLIBC * Copyright (C) 2017-2021 Willy Tarreau */ /* 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" #define __nolibc_open_flags(_flags) ((_flags) | O_LARGEFILE) #define __nolibc_open_mode(_flags) \ ({ \ mode_t _mode; \ va_list args; \ \ va_start(args, (_flags)); \ _mode = va_arg(args, mode_t); \ va_end(args); \ \ _mode; \ }) /* * 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 __nolibc_syscall4(__NR_openat, dirfd, path, flags, mode); } static __attribute__((unused)) int openat(int dirfd, const char *path, int flags, ...) { return __sysret(_sys_openat(dirfd, path, __nolibc_open_flags(flags), __nolibc_open_mode(flags))); } /* * 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 __nolibc_syscall4(__NR_openat, AT_FDCWD, path, flags, mode); } static __attribute__((unused)) int open(const char *path, int flags, ...) { return __sysret(_sys_open(path, __nolibc_open_flags(flags), __nolibc_open_mode(flags))); } /* * int creat(const char *path, mode_t mode); */ static __attribute__((unused)) int creat(const char *path, mode_t mode) { return open(path, O_CREAT | O_WRONLY | O_TRUNC, mode); } #endif /* _NOLIBC_FCNTL_H */