diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-08-03 18:53:09 +0200 |
---|---|---|
committer | Sven Eden <sven.eden@prydeworx.com> | 2018-10-29 10:18:32 +0100 |
commit | 7c0ab3a048d170b66807e8f32231878abcb93a49 (patch) | |
tree | ee22811f7c120bd264efc1402ac7cadb622f4a82 /src/login/logind-user.c | |
parent | b51458394dfa82168ab4a94a6b3d16557a6bf93f (diff) |
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
(cherry picked from commit 8c29a4570993105fecc12288596d2ee77c7f82b8)
Diffstat (limited to 'src/login/logind-user.c')
-rw-r--r-- | src/login/logind-user.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/login/logind-user.c b/src/login/logind-user.c index d2dc2bef6..de09c2062 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -32,23 +32,24 @@ /// Additional includes needed by elogind #include "user-runtime-dir.h" -int user_new(User **out, Manager *m, uid_t uid, gid_t gid, const char *name) { +int user_new(User **ret, Manager *m, uid_t uid, gid_t gid, const char *name) { _cleanup_(user_freep) User *u = NULL; char lu[DECIMAL_STR_MAX(uid_t) + 1]; int r; - assert(out); + assert(ret); assert(m); assert(name); - u = new0(User, 1); + u = new(User, 1); if (!u) return -ENOMEM; - u->manager = m; - u->uid = uid; - u->gid = gid; - xsprintf(lu, UID_FMT, uid); + *u = (User) { + .manager = m, + .uid = uid, + .gid = gid, + }; u->name = strdup(name); if (!u->name) @@ -60,6 +61,7 @@ int user_new(User **out, Manager *m, uid_t uid, gid_t gid, const char *name) { if (asprintf(&u->runtime_path, "/run/user/"UID_FMT, uid) < 0) return -ENOMEM; + xsprintf(lu, UID_FMT, uid); r = slice_build_subslice(SPECIAL_USER_SLICE, lu, &u->slice); if (r < 0) return r; @@ -80,8 +82,7 @@ int user_new(User **out, Manager *m, uid_t uid, gid_t gid, const char *name) { if (r < 0) return r; - *out = TAKE_PTR(u); - + *ret = TAKE_PTR(u); return 0; } @@ -278,7 +279,7 @@ int user_save(User *u) { if (!u->started) return 0; - return user_save_internal (u); + return user_save_internal(u); } int user_load(User *u) { |