From 1543c2385c0a1afbdc59b50c8ecd132a0d60bbef Mon Sep 17 00:00:00 2001 From: DaanDeMeyer Date: Thu, 3 Jul 2025 14:23:16 +0200 Subject: [PATCH] fd-util: Move O_ACCMODE_STRICT to fd-util.h We're still discussing whether we want to remove this or not, but regardless of whether we end up removing it or not, it's something we add ourselves and as such should not live in our headers that override glibc headers, so let's move it to fd-util.h. --- src/basic/fd-util.h | 6 ++++++ src/basic/include/fcntl.h | 6 ------ src/libsystemd/sd-journal/journal-file.c | 5 +++++ src/libsystemd/sd-journal/journal-file.h | 5 +---- src/shared/journal-file-util.c | 1 + 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/basic/fd-util.h b/src/basic/fd-util.h index 75cc5310c7a..25ad3e9361e 100644 --- a/src/basic/fd-util.h +++ b/src/basic/fd-util.h @@ -44,6 +44,12 @@ # endif #endif +/* On musl, O_ACCMODE is defined as (03|O_SEARCH), unlike glibc which defines it as + * (O_RDONLY|O_WRONLY|O_RDWR). Additionally, O_SEARCH is simply defined as O_PATH. This changes the behaviour + * of O_ACCMODE in certain situations, which we don't want. This definition is copied from glibc and works + * around the problems with musl's definition. */ +#define O_ACCMODE_STRICT (O_RDONLY|O_WRONLY|O_RDWR) + int close_nointr(int fd); int safe_close(int fd); void safe_close_pair(int p[static 2]); diff --git a/src/basic/include/fcntl.h b/src/basic/include/fcntl.h index 344287f7680..5f1d90ad795 100644 --- a/src/basic/include/fcntl.h +++ b/src/basic/include/fcntl.h @@ -17,9 +17,3 @@ #ifndef AT_HANDLE_FID #define AT_HANDLE_FID AT_REMOVEDIR #endif - -/* On musl, O_ACCMODE is defined as (03|O_SEARCH), unlike glibc which defines it as - * (O_RDONLY|O_WRONLY|O_RDWR). Additionally, O_SEARCH is simply defined as O_PATH. This changes the behaviour - * of O_ACCMODE in certain situations, which we don't want. This definition is copied from glibc and works - * around the problems with musl's definition. */ -#define O_ACCMODE_STRICT (O_RDONLY|O_WRONLY|O_RDWR) diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index 224c3e23c7a..baabb92fd70 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -4694,6 +4694,11 @@ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec, int log return false; } +bool journal_file_writable(JournalFile *f) { + assert(f); + return (f->open_flags & O_ACCMODE_STRICT) != O_RDONLY; +} + static const char * const journal_object_type_table[] = { [OBJECT_UNUSED] = "unused", [OBJECT_DATA] = "data", diff --git a/src/libsystemd/sd-journal/journal-file.h b/src/libsystemd/sd-journal/journal-file.h index 9598879066a..4a5e0d81e2f 100644 --- a/src/libsystemd/sd-journal/journal-file.h +++ b/src/libsystemd/sd-journal/journal-file.h @@ -378,7 +378,4 @@ static inline uint32_t COMPRESSION_TO_HEADER_INCOMPATIBLE_FLAG(Compression c) { } } -static inline bool journal_file_writable(JournalFile *f) { - assert(f); - return (f->open_flags & O_ACCMODE_STRICT) != O_RDONLY; -} +bool journal_file_writable(JournalFile *f); diff --git a/src/shared/journal-file-util.c b/src/shared/journal-file-util.c index ce799e9256e..990146b6246 100644 --- a/src/shared/journal-file-util.c +++ b/src/shared/journal-file-util.c @@ -9,6 +9,7 @@ #include "chattr-util.h" #include "copy.h" #include "errno-util.h" +#include "fd-util.h" #include "journal-authenticate.h" #include "journal-file-util.h" #include "log.h" -- 2.47.3