commit:     d845e29e96337da5814fa707d62b0b868b5d0cdc
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 18 19:59:56 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Dec 18 19:59:56 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d845e29e

sys-auth/elogind: fix musl build

Closes: https://bugs.gentoo.org/967191
Signed-off-by: Sam James <sam <AT> gentoo.org>

 sys-auth/elogind/elogind-255.22-r1.ebuild        |  1 +
 sys-auth/elogind/files/elogind-255.22-musl.patch | 86 ++++++++++++++++++++++++
 2 files changed, 87 insertions(+)

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 <[email protected]>
+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 <[email protected]>
+---
+ 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 <unistd.h>
+ #include <pthread.h> /* 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];
+ 
+

Reply via email to