From d845e29e96337da5814fa707d62b0b868b5d0cdc Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 18 Dec 2025 19:59:56 +0000 Subject: [PATCH] sys-auth/elogind: fix musl build Closes: https://bugs.gentoo.org/967191 Signed-off-by: Sam James --- sys-auth/elogind/elogind-255.22-r1.ebuild | 1 + .../elogind/files/elogind-255.22-musl.patch | 86 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 sys-auth/elogind/files/elogind-255.22-musl.patch diff --git a/sys-auth/elogind/elogind-255.22-r1.ebuild b/sys-auth/elogind/elogind-255.22-r1.ebuild index abec7f283991..bf484570bb69 100644 --- a/sys-auth/elogind/elogind-255.22-r1.ebuild +++ b/sys-auth/elogind/elogind-255.22-r1.ebuild @@ -60,6 +60,7 @@ PATCHES=( # https://github.com/elogind/elogind/issues/285 "${FILESDIR}/${PN}-255.17-revert-s2idle.patch" # bug 939042 "${FILESDIR}/${PN}-255.22-revert-openrc-user.patch" # bug 966481 + "${FILESDIR}/${PN}-255.22-musl.patch" # bug 967191 ) python_check_deps() { diff --git a/sys-auth/elogind/files/elogind-255.22-musl.patch b/sys-auth/elogind/files/elogind-255.22-musl.patch new file mode 100644 index 000000000000..38a68be6b25f --- /dev/null +++ b/sys-auth/elogind/files/elogind-255.22-musl.patch @@ -0,0 +1,86 @@ +https://github.com/elogind/elogind/commit/c09b9caece0459ec56b234a87583e1bfac3c3271 + +From c09b9caece0459ec56b234a87583e1bfac3c3271 Mon Sep 17 00:00:00 2001 +From: Sven Eden +Date: Thu, 20 Nov 2025 08:12:12 +0100 +Subject: [PATCH] journal-send.c, bus-error.c: Fix strerror_r handling for + non-GLIBC systems + +Fix the handling of `strerror_r` in non-GLIBC systems to ensure compatibility. + +- Handle `strerror_r` differently for non-GLIBC systems in `journal-send.c`. +- Handle `strerror_r` differently for non-GLIBC systems in `bus-error.c`. +- Remove redundant definition of `strerror_r` from `musl_missing.h`. + +This change ensures that the `strerror_r` function behaves correctly across different environments, particularly on systems using the musl C library. + +Bug: #320 +Closes: #320 +Signed-off-by: Sven Eden +--- + src/basic/musl_missing.h | 2 -- + src/libelogind/sd-bus/bus-error.c | 10 ++++++++++ + src/libelogind/sd-journal/journal-send.c | 5 +++++ + 3 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/src/basic/musl_missing.h b/src/basic/musl_missing.h +index d8a5bff222..3f592f1c6f 100644 +--- a/src/basic/musl_missing.h ++++ b/src/basic/musl_missing.h +@@ -26,8 +26,6 @@ void elogind_set_program_name(const char* pcall); + #include + #include /* for pthread_atfork */ + +-#define strerror_r(e, m, k) (strerror_r(e, m, k) < 0 ? strdup("strerror_r() failed") : m); +- + /* + * Possibly TODO according to http://man7.org/linux/man-pages/man3/getenv.3.html + * + test if the process's effective user ID does not match its real user ID or +diff --git a/src/libelogind/sd-bus/bus-error.c b/src/libelogind/sd-bus/bus-error.c +index 58c24d25c0..4895bd3c66 100644 +--- a/src/libelogind/sd-bus/bus-error.c ++++ b/src/libelogind/sd-bus/bus-error.c +@@ -405,7 +405,12 @@ static void bus_error_strerror(sd_bus_error *e, int error) { + return; + + errno = 0; ++#ifndef __GLIBC__ ++ strerror_r(error, m, k); ++ x = m; ++#else // __GLIBC__ + x = strerror_r(error, m, k); ++#endif // __GLIBC__ + if (errno == ERANGE || strlen(x) >= k - 1) { + free(m); + k *= 2; +@@ -591,7 +596,12 @@ const char* _bus_error_message(const sd_bus_error *e, int error, char buf[static + if (e && e->message) + return e->message; + ++#ifndef __GLIBC__ ++ strerror_r(abs(error), buf, ERRNO_BUF_LEN); ++ return buf; ++#else // __GLIBC__ + return strerror_r(abs(error), buf, ERRNO_BUF_LEN); ++#endif // __GLIBC__ + } + + static bool map_ok(const sd_bus_error_map *map) { +diff --git a/src/libelogind/sd-journal/journal-send.c b/src/libelogind/sd-journal/journal-send.c +index f0a0190a5b..6bfa2211f3 100644 +--- a/src/libelogind/sd-journal/journal-send.c ++++ b/src/libelogind/sd-journal/journal-send.c +@@ -424,7 +424,12 @@ static int fill_iovec_perror_and_send(const char *message, int skip, struct iove + char* j; + + errno = 0; ++#ifndef __GLIBC__ ++ strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k); ++ j = buffer + 8 + k; ++#else // __GLIBC__ + j = strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k); ++#endif // __GLIBC__ + if (errno == 0) { + char error[STRLEN("ERRNO=") + DECIMAL_STR_MAX(int) + 1]; + +