| /* 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 */ |