diff options
author | Lennart Poettering <lennart@poettering.net> | 2011-09-23 02:39:28 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2011-09-23 16:28:27 +0200 |
commit | de3756ab9916551f3f4f1f360aee59aeed238b5b (patch) | |
tree | d3f8fc787262362d6edd63819fbab60cc6b0d285 /src/sd-login.c | |
parent | 4e240ab0c93f4d454b065eef7074132969ac6f16 (diff) |
llvm-analyze: fix some bugs found by llvm-analyze
Diffstat (limited to 'src/sd-login.c')
-rw-r--r-- | src/sd-login.c | 41 |
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++; + } } } |