From: Yu Watanabe Date: Wed, 31 May 2017 14:48:47 +0000 (+0900) Subject: sd-login: treat missing /run/systemd/{seats,sessions,users} the same as empty X-Git-Tag: v234~150^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2b5e92673d9ed864bb9dad1a7e816f093b75f8cb;p=thirdparty%2Fsystemd.git sd-login: treat missing /run/systemd/{seats,sessions,users} the same as empty C.f. 0543105b0fb13e4243b71a78f62f81fb9dde5d51. This makes if /run/systemd/{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. --- diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index 49573a7d343..ce080acd4c7 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -798,11 +798,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) { @@ -813,8 +829,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;