diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2017-05-31 23:48:47 +0900 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-07-25 09:46:52 +0200 |
commit | 18b9ec874ae92e1b9b7daf91eee8b378a314f92a (patch) | |
tree | eedf1befe77e7c29086e667e354d1de77ae83fe9 /src | |
parent | 231def7c2f9c57a056ae6ced739db708ca6fea19 (diff) |
sd-login: treat missing /run/elogind/{seats,sessions,users} the same as empty
C.f. 0543105b0fb13e4243b71a78f62f81fb9dde5d51.
This makes if /run/elogind/{seats,sessions,users} are missing, then
sd_get_seats(), sd_get_sessions() and sd_get_uids() return 0, that is,
an empty list, instead of -ENOENT.
Diffstat (limited to 'src')
-rw-r--r-- | src/libelogind/sd-login/sd-login.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/libelogind/sd-login/sd-login.c b/src/libelogind/sd-login/sd-login.c index 161eccd08..7630e6265 100644 --- a/src/libelogind/sd-login/sd-login.c +++ b/src/libelogind/sd-login/sd-login.c @@ -862,11 +862,27 @@ _public_ int sd_seat_can_graphical(const char *seat) { } _public_ int sd_get_seats(char ***seats) { - return get_files_in_directory("/run/systemd/seats/", seats); + int r; + + r = get_files_in_directory("/run/systemd/seats/", seats); + if (r == -ENOENT) { + if (seats) + *seats = NULL; + return 0; + } + return r; } _public_ int sd_get_sessions(char ***sessions) { - return get_files_in_directory("/run/systemd/sessions/", sessions); + int r; + + r = get_files_in_directory("/run/systemd/sessions/", sessions); + if (r == -ENOENT) { + if (sessions) + *sessions = NULL; + return 0; + } + return r; } _public_ int sd_get_uids(uid_t **users) { @@ -877,8 +893,14 @@ _public_ int sd_get_uids(uid_t **users) { _cleanup_free_ uid_t *l = NULL; d = opendir("/run/systemd/users/"); - if (!d) + if (!d) { + if (errno == ENOENT) { + if (users) + *users = NULL; + return 0; + } return -errno; + } FOREACH_DIRENT_ALL(de, d, return -errno) { int k; |