From: Lennart Poettering Date: Wed, 21 Mar 2018 18:04:45 +0000 (+0100) Subject: logind: rework manager_get_{user|session}_by_pid() a bit X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ad57fffa7d5b0480148f993af2f4799d62aa0871;p=elogind.git logind: rework manager_get_{user|session}_by_pid() a bit Let's make sure we always initialize the return value if we return non-negative. Just a matter of coding style: we should always initialize our return values when we return >= 0, and leave them unclobbered if we return < 0. --- diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 53b11340d..0aa22b8af 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -282,7 +282,7 @@ int manager_process_button_device(Manager *m, struct udev_device *d) { return 0; } -int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) { +int manager_get_session_by_pid(Manager *m, pid_t pid, Session **ret) { #if 0 /// elogind does not support systemd units, but its own session system _cleanup_free_ char *unit = NULL; #else @@ -299,9 +299,13 @@ int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) { #if 0 /// elogind does not support systemd units, but its own session system r = cg_pid_get_unit(pid, &unit); if (r < 0) - return 0; + goto not_found; s = hashmap_get(m->session_units, unit); + goto not_found; + + if (ret) + *ret = s; #else log_debug_elogind("Searching session for PID %u", pid); r = cg_pid_get_session(pid, &session_name); @@ -313,14 +317,16 @@ int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) { session_name, s && s->id ? s->id : "NULL"); #endif // 0 if (!s) - return 0; - if (session) - *session = s; return 1; + +not_found: + if (ret) + *ret = NULL; + return 0; } -int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) { +int manager_get_user_by_pid(Manager *m, pid_t pid, User **ret) { #if 0 /// elogind does not support systemd units, but its own session system _cleanup_free_ char *unit = NULL; User *u; @@ -330,7 +336,6 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) { int r; assert(m); - assert(user); if (!pid_is_valid(pid)) return -EINVAL; @@ -338,17 +343,24 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) { #if 0 /// elogind does not support systemd units, but its own session system r = cg_pid_get_slice(pid, &unit); if (r < 0) - return 0; + goto not_found; u = hashmap_get(m->user_units, unit); if (!u) - return 0; + goto not_found; + - *user = u; +not_found: + if (ret) + *ret = NULL; + + return 0; #else r = manager_get_session_by_pid (m, pid, &s); if (r <= 0) return r; + if (ret) + *ret = u; *user = s->user; #endif // 0