summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2017-05-31 23:48:47 +0900
committerSven Eden <yamakuzure@gmx.net>2017-07-25 09:46:52 +0200
commit18b9ec874ae92e1b9b7daf91eee8b378a314f92a (patch)
treeeedf1befe77e7c29086e667e354d1de77ae83fe9 /src
parent231def7c2f9c57a056ae6ced739db708ca6fea19 (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.c28
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;