From: Zbigniew Jędrzejewski-Szmek Date: Wed, 31 May 2017 00:21:45 +0000 (-0400) Subject: sd-login: translate -ENOMEDIUM to -ENODATA X-Git-Tag: chiark/234.4-1+devuan1.1+iwj1~117 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=231def7c2f9c57a056ae6ced739db708ca6fea19 sd-login: translate -ENOMEDIUM to -ENODATA The -ENOMEDIUM return value was introduced in v232-1001-g2977724b09, ('core: make hybrid cgroup unified mode keep compat /sys/fs/cgroup/elogind hierarchy'), and would be returned by cg_pid_get_path_shifted(), but the documented and expected return value is -ENODATA. Let's just catch ENXIO/ENOMEDIUM and translate it to ENODATA in all cases. Complements 171f8f591ff27ebb5ff475b7a9d1f13a846c9331, fixes #6012. --- diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml index 5bc5efdac..a4be941de 100644 --- a/man/sd_pid_get_session.xml +++ b/man/sd_pid_get_session.xml @@ -285,7 +285,7 @@ - -BADF + -EBADF The specified socket file descriptor was invalid. diff --git a/src/libelogind/sd-login/sd-login.c b/src/libelogind/sd-login/sd-login.c index 96d7e447a..161eccd08 100644 --- a/src/libelogind/sd-login/sd-login.c +++ b/src/libelogind/sd-login/sd-login.c @@ -62,7 +62,7 @@ _public_ int sd_pid_get_session(pid_t pid, char **session) { assert_return(session, -EINVAL); r = cg_pid_get_session(pid, session); - return r == -ENXIO ? -ENODATA : r; + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; } _public_ int sd_pid_get_unit(pid_t pid, char **unit) { @@ -75,7 +75,7 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) { #if 0 /// elogind does not support systemd units r = cg_pid_get_unit(pid, unit); - return r == -ENXIO ? -ENODATA : r; + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; #else return -ESRCH; #endif // 0 @@ -91,55 +91,71 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) { #if 0 /// elogind does not support systemd units r = cg_pid_get_user_unit(pid, unit); - return r == -ENXIO ? -ENODATA : r; + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; #else return -ESRCH; #endif // 0 } _public_ int sd_pid_get_machine_name(pid_t pid, char **name) { +#if 0 /// UNNEEDED by elogind + int r; +#endif // 0 assert_return(pid >= 0, -EINVAL); assert_return(name, -EINVAL); #if 0 /// elogind does not support systemd units - return cg_pid_get_machine_name(pid, name); + r = cg_pid_get_machine_name(pid, name); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; #else return -ESRCH; #endif // 0 } _public_ int sd_pid_get_slice(pid_t pid, char **slice) { +#if 0 /// UNNEEDED by elogind + int r; +#endif // 0 assert_return(pid >= 0, -EINVAL); assert_return(slice, -EINVAL); #if 0 /// elogind does not support systemd slices - return cg_pid_get_slice(pid, slice); + r = cg_pid_get_slice(pid, slice); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; #else return -ESRCH; #endif // 0 } _public_ int sd_pid_get_user_slice(pid_t pid, char **slice) { +#if 0 /// UNNEEDED by elogind + int r; +#endif // 0 assert_return(pid >= 0, -EINVAL); assert_return(slice, -EINVAL); #if 0 /// elogind does not support systemd slices - return cg_pid_get_user_slice(pid, slice); + r = cg_pid_get_user_slice(pid, slice); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; #else return -ESRCH; #endif // 0 } _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { +#if 0 /// UNNEEDED by elogind + int r; +#endif // 0 assert_return(pid >= 0, -EINVAL); assert_return(uid, -EINVAL); #if 0 /// elogind does not support systemd slices - return cg_pid_get_owner_uid(pid, uid); + r = cg_pid_get_owner_uid(pid, uid); + return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; #else return -ESRCH; #endif // 0 diff --git a/src/libelogind/sd-login/test-login.c b/src/libelogind/sd-login/test-login.c index 589776a7c..3dc797530 100644 --- a/src/libelogind/sd-login/test-login.c +++ b/src/libelogind/sd-login/test-login.c @@ -63,14 +63,15 @@ static void test_login(void) { r = sd_pid_get_unit(0, &unit); assert_se(r >= 0 || r == -ENODATA); - log_info("sd_pid_get_unit(0, …) → \"%s\"", unit); + log_info("sd_pid_get_unit(0, …) → \"%s\"", strna(unit)); r = sd_pid_get_user_unit(0, &user_unit); assert_se(r >= 0 || r == -ENODATA); - log_info("sd_pid_get_user_unit(0, …) → \"%s\"", user_unit); + log_info("sd_pid_get_user_unit(0, …) → \"%s\"", strna(user_unit)); - assert_se(sd_pid_get_slice(0, &slice) >= 0); - log_info("sd_pid_get_slice(0, …) → \"%s\"", slice); + r = sd_pid_get_slice(0, &slice); + assert_se(r >= 0 || r == -ENODATA); + log_info("sd_pid_get_slice(0, …) → \"%s\"", strna(slice)); r = sd_pid_get_session(0, &session); if (r < 0) {