mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
tools/nolibc: split open mode handling into a macro
This logic is duplicated and some upcoming extensions would require even more duplicated logic. Move it into a macro to avoid the duplication and allow cleaner changes. Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260514-nolibc-open-tmpfile-v2-2-b4c6c5efa266@weissschuh.net
This commit is contained in:
parent
ced7994fc8
commit
a8856027e2
|
|
@ -16,6 +16,21 @@
|
|||
|
||||
#define __nolibc_open_flags(_flags) ((_flags) | O_LARGEFILE)
|
||||
|
||||
#define __nolibc_open_mode(_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); \
|
||||
} \
|
||||
\
|
||||
_mode; \
|
||||
})
|
||||
|
||||
/*
|
||||
* int openat(int dirfd, const char *path, int flags[, mode_t mode]);
|
||||
*/
|
||||
|
|
@ -29,17 +44,8 @@ int _sys_openat(int dirfd, const char *path, int flags, mode_t 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, __nolibc_open_flags(flags), mode));
|
||||
return __sysret(_sys_openat(dirfd, path, __nolibc_open_flags(flags),
|
||||
__nolibc_open_mode(flags)));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -55,17 +61,7 @@ int _sys_open(const char *path, int flags, mode_t 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, __nolibc_open_flags(flags), mode));
|
||||
return __sysret(_sys_open(path, __nolibc_open_flags(flags), __nolibc_open_mode(flags)));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user