chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
util: properly detect what the last capability is
[elogind.git]
/
src
/
sd-login.c
diff --git
a/src/sd-login.c
b/src/sd-login.c
index 2489d78c603dba842113eda63d8ee663eb0100ce..a0a56c49526ebdf2fb85a83137418b2e8c77d679 100644
(file)
--- a/
src/sd-login.c
+++ b/
src/sd-login.c
@@
-481,33
+481,39
@@
_public_ int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **ui
if (uids && t) {
char *w, *state;
size_t l;
if (uids && t) {
char *w, *state;
size_t l;
- unsigned i = 0;
FOREACH_WORD(w, l, t, state)
n++;
FOREACH_WORD(w, l, t, state)
n++;
- b = new(uid_t, n);
- if (!b) {
- strv_free(a);
- return -ENOMEM;
- }
-
- FOREACH_WORD(w, l, t, state) {
- char *k;
+ if (n == 0)
+ b = NULL;
+ else {
+ unsigned i = 0;
- k = strndup(w, l);
- if (!k) {
- free(t);
- free(b);
+ b = new(uid_t, n);
+ if (!b) {
+ strv_free(a);
return -ENOMEM;
}
return -ENOMEM;
}
- r = parse_uid(k, b + i);
- free(k);
- if (r < 0)
- continue;
+ FOREACH_WORD(w, l, t, state) {
+ char *k;
+
+ k = strndup(w, l);
+ if (!k) {
+ free(t);
+ free(b);
+ strv_free(a);
+ return -ENOMEM;
+ }
- i++;
+ r = parse_uid(k, b + i);
+ free(k);
+ if (r < 0)
+ continue;
+
+ i++;
+ }
}
}
}
}
@@
-574,6
+580,9
@@
_public_ int sd_get_uids(uid_t **users) {
uid_t *l = NULL;
d = opendir("/run/systemd/users/");
uid_t *l = NULL;
d = opendir("/run/systemd/users/");
+ if (!d)
+ return -errno;
+
for (;;) {
struct dirent buffer, *de;
int k;
for (;;) {
struct dirent buffer, *de;
int k;