From 3956b3a958e5a26b4f8edbf4b7a6460e92719362 Mon Sep 17 00:00:00 2001 From: Etienne Cordonnier Date: Wed, 10 Sep 2025 16:25:27 +0200 Subject: [PATCH] uutils-coreutils: add feat_systemd_logind It allows commands such as "who" to work even when systemd is compiled without "utmp" support. Signed-off-by: Etienne Cordonnier Signed-off-by: Khem Raj --- ...d_logind-replace-i8-with-libc-c_char.patch | 76 +++++++++++++++++++ .../uutils-coreutils_0.2.0.bb | 8 +- 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 meta-oe/recipes-core/uutils-coreutils/uutils-coreutils/0001-systemd_logind-replace-i8-with-libc-c_char.patch diff --git a/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils/0001-systemd_logind-replace-i8-with-libc-c_char.patch b/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils/0001-systemd_logind-replace-i8-with-libc-c_char.patch new file mode 100644 index 0000000000..30845a3b12 --- /dev/null +++ b/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils/0001-systemd_logind-replace-i8-with-libc-c_char.patch @@ -0,0 +1,76 @@ +From f5b5a3dec5d77cca53423f21d2a7652f2b432aa6 Mon Sep 17 00:00:00 2001 +From: Etienne Cordonnier +Date: Tue, 9 Sep 2025 23:36:05 +0200 +Subject: [PATCH] systemd_logind: replace i8 with libc::c_char + +The C type "char" defaults to unsigned on arm linux, and signed on x86-64 linux. This causes some build errors in the systemd_logind ffi code when compiling for arm. + +Fixes https://github.com/uutils/coreutils/issues/8593 + +Signed-off-by: Etienne Cordonnier +Upstream-Status: Backport [https://github.com/uutils/coreutils/commit/f5b5a3dec5d77cca53423f21d2a7652f2b432aa6] +--- + src/uucore/src/lib/features/systemd_logind.rs | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/uucore/src/lib/features/systemd_logind.rs b/src/uucore/src/lib/features/systemd_logind.rs +index d2727c530..537cb1e3f 100644 +--- a/src/uucore/src/lib/features/systemd_logind.rs ++++ b/src/uucore/src/lib/features/systemd_logind.rs +@@ -51,7 +51,7 @@ mod login { + + /// Get all active sessions + pub fn get_sessions() -> Result, Box> { +- let mut sessions_ptr: *mut *mut i8 = ptr::null_mut(); ++ let mut sessions_ptr: *mut *mut libc::c_char = ptr::null_mut(); + + let result = unsafe { ffi::sd_get_sessions(&mut sessions_ptr) }; + +@@ -120,7 +120,7 @@ mod login { + /// Get TTY for a session + pub fn get_session_tty(session_id: &str) -> Result, Box> { + let session_cstring = CString::new(session_id)?; +- let mut tty_ptr: *mut i8 = ptr::null_mut(); ++ let mut tty_ptr: *mut libc::c_char = ptr::null_mut(); + + let result = unsafe { ffi::sd_session_get_tty(session_cstring.as_ptr(), &mut tty_ptr) }; + +@@ -149,7 +149,7 @@ mod login { + session_id: &str, + ) -> Result, Box> { + let session_cstring = CString::new(session_id)?; +- let mut host_ptr: *mut i8 = ptr::null_mut(); ++ let mut host_ptr: *mut libc::c_char = ptr::null_mut(); + + let result = + unsafe { ffi::sd_session_get_remote_host(session_cstring.as_ptr(), &mut host_ptr) }; +@@ -179,7 +179,7 @@ mod login { + session_id: &str, + ) -> Result, Box> { + let session_cstring = CString::new(session_id)?; +- let mut display_ptr: *mut i8 = ptr::null_mut(); ++ let mut display_ptr: *mut libc::c_char = ptr::null_mut(); + + let result = + unsafe { ffi::sd_session_get_display(session_cstring.as_ptr(), &mut display_ptr) }; +@@ -209,7 +209,7 @@ mod login { + session_id: &str, + ) -> Result, Box> { + let session_cstring = CString::new(session_id)?; +- let mut type_ptr: *mut i8 = ptr::null_mut(); ++ let mut type_ptr: *mut libc::c_char = ptr::null_mut(); + + let result = unsafe { ffi::sd_session_get_type(session_cstring.as_ptr(), &mut type_ptr) }; + +@@ -238,7 +238,7 @@ mod login { + session_id: &str, + ) -> Result, Box> { + let session_cstring = CString::new(session_id)?; +- let mut seat_ptr: *mut i8 = ptr::null_mut(); ++ let mut seat_ptr: *mut libc::c_char = ptr::null_mut(); + + let result = unsafe { ffi::sd_session_get_seat(session_cstring.as_ptr(), &mut seat_ptr) }; + +-- +2.43.0 + diff --git a/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.2.0.bb b/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.2.0.bb index 039130c9d3..88663ccb21 100644 --- a/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.2.0.bb +++ b/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.2.0.bb @@ -7,7 +7,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e74349878141b240070458d414ab3b64" inherit cargo cargo-update-recipe-crates -SRC_URI = "git://github.com/uutils/coreutils.git;protocol=https;branch=main" +SRC_URI = " \ + git://github.com/uutils/coreutils.git;protocol=https;branch=main \ + file://0001-systemd_logind-replace-i8-with-libc-c_char.patch \ +" SRCREV = "38a248cba6ddf72a453a79365cd919fa40783a44" @@ -16,8 +19,9 @@ require ${BPN}-crates.inc PROVIDES = "coreutils" RPROVIDES:${PN} = "coreutils" -PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)}" +PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'selinux systemd', d)}" PACKAGECONFIG[selinux] = "--features feat_selinux,,clang-native libselinux-native libselinux" +PACKAGECONFIG[systemd] = "--features feat_systemd_logind,,systemd" CARGO_BUILD_FLAGS += "--features unix --features feat_external_libstdbuf"