diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-08-03 18:53:09 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-10-13 12:59:29 +0200 |
commit | 8c29a4570993105fecc12288596d2ee77c7f82b8 (patch) | |
tree | 9b3b515812f3949e6a95b6cdaaabcc3ac037da49 /src/login/logind-core.c | |
parent | fd8879498d50b19c5abd0a90daa8f87be6ff6e9f (diff) | |
download | systemd-8c29a4570993105fecc12288596d2ee77c7f82b8.tar.gz |
logind: rework Seat/Session/User object allocation and freeing a bit
Let's update things a bit to follow current practices:
- User structure initialization rather than zero-initialized allocation
- Always propagate proper errors from allocation functions
- Use _cleanup_ for freeing objects when allocation fails half-way
- Make destructors return NULL
Diffstat (limited to 'src/login/logind-core.c')
-rw-r--r-- | src/login/logind-core.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 87506088a1..3fe2838fc2 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -90,15 +90,16 @@ int manager_add_device(Manager *m, const char *sysfs, bool master, Device **_dev int manager_add_seat(Manager *m, const char *id, Seat **_seat) { Seat *s; + int r; assert(m); assert(id); s = hashmap_get(m->seats, id); if (!s) { - s = seat_new(m, id); - if (!s) - return -ENOMEM; + r = seat_new(&s, m, id); + if (r < 0) + return r; } if (_seat) @@ -109,15 +110,16 @@ int manager_add_seat(Manager *m, const char *id, Seat **_seat) { int manager_add_session(Manager *m, const char *id, Session **_session) { Session *s; + int r; assert(m); assert(id); s = hashmap_get(m->sessions, id); if (!s) { - s = session_new(m, id); - if (!s) - return -ENOMEM; + r = session_new(&s, m, id); + if (r < 0) + return r; } if (_session) |