mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-08 20:58:20 +03:00
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/systemd 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.
This commit is contained in:
parent
5e354b2252
commit
bc9e9af137
@ -285,7 +285,7 @@
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><constant>-BADF</constant></term>
|
||||
<term><constant>-EBADF</constant></term>
|
||||
|
||||
<listitem><para>The specified socket file descriptor was
|
||||
invalid.</para></listitem>
|
||||
|
@ -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) {
|
||||
@ -72,7 +72,7 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) {
|
||||
assert_return(unit, -EINVAL);
|
||||
|
||||
r = cg_pid_get_unit(pid, unit);
|
||||
return r == -ENXIO ? -ENODATA : r;
|
||||
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
|
||||
}
|
||||
|
||||
_public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
|
||||
@ -82,39 +82,47 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
|
||||
assert_return(unit, -EINVAL);
|
||||
|
||||
r = cg_pid_get_user_unit(pid, unit);
|
||||
return r == -ENXIO ? -ENODATA : r;
|
||||
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
|
||||
}
|
||||
|
||||
_public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
|
||||
int r;
|
||||
|
||||
assert_return(pid >= 0, -EINVAL);
|
||||
assert_return(name, -EINVAL);
|
||||
|
||||
return cg_pid_get_machine_name(pid, name);
|
||||
r = cg_pid_get_machine_name(pid, name);
|
||||
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
|
||||
}
|
||||
|
||||
_public_ int sd_pid_get_slice(pid_t pid, char **slice) {
|
||||
int r;
|
||||
|
||||
assert_return(pid >= 0, -EINVAL);
|
||||
assert_return(slice, -EINVAL);
|
||||
|
||||
return cg_pid_get_slice(pid, slice);
|
||||
r = cg_pid_get_slice(pid, slice);
|
||||
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
|
||||
}
|
||||
|
||||
_public_ int sd_pid_get_user_slice(pid_t pid, char **slice) {
|
||||
int r;
|
||||
|
||||
assert_return(pid >= 0, -EINVAL);
|
||||
assert_return(slice, -EINVAL);
|
||||
|
||||
return cg_pid_get_user_slice(pid, slice);
|
||||
r = cg_pid_get_user_slice(pid, slice);
|
||||
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
|
||||
}
|
||||
|
||||
_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
|
||||
int r;
|
||||
|
||||
assert_return(pid >= 0, -EINVAL);
|
||||
assert_return(uid, -EINVAL);
|
||||
|
||||
return cg_pid_get_owner_uid(pid, uid);
|
||||
r = cg_pid_get_owner_uid(pid, uid);
|
||||
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
|
||||
}
|
||||
|
||||
_public_ int sd_pid_get_cgroup(pid_t pid, char **cgroup) {
|
||||
|
@ -61,14 +61,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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user