summaryrefslogtreecommitdiff
path: root/src/sd-login.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-09-23 02:39:28 +0200
committerLennart Poettering <lennart@poettering.net>2011-09-23 16:28:27 +0200
commitde3756ab9916551f3f4f1f360aee59aeed238b5b (patch)
treed3f8fc787262362d6edd63819fbab60cc6b0d285 /src/sd-login.c
parent4e240ab0c93f4d454b065eef7074132969ac6f16 (diff)
llvm-analyze: fix some bugs found by llvm-analyze
Diffstat (limited to 'src/sd-login.c')
-rw-r--r--src/sd-login.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/src/sd-login.c b/src/sd-login.c
index b670d18266..a0a56c4952 100644
--- a/src/sd-login.c
+++ b/src/sd-login.c
@@ -481,34 +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;
- unsigned i = 0;
FOREACH_WORD(w, l, t, state)
n++;
- b = new(uid_t, n);
- if (!b) {
- strv_free(a);
- return -ENOMEM;
- }
+ if (n == 0)
+ b = NULL;
+ else {
+ unsigned i = 0;
- FOREACH_WORD(w, l, t, state) {
- char *k;
-
- k = strndup(w, l);
- if (!k) {
- free(t);
- free(b);
+ b = new(uid_t, n);
+ if (!b) {
strv_free(a);
return -ENOMEM;
}
- r = parse_uid(k, b + i);
- free(k);
- if (r < 0)
- continue;
+ FOREACH_WORD(w, l, t, state) {
+ char *k;
- i++;
+ k = strndup(w, l);
+ if (!k) {
+ free(t);
+ free(b);
+ strv_free(a);
+ return -ENOMEM;
+ }
+
+ r = parse_uid(k, b + i);
+ free(k);
+ if (r < 0)
+ continue;
+
+ i++;
+ }
}
}