summaryrefslogtreecommitdiff
path: root/src/login/logind-core.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-03-21 19:04:45 +0100
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commitad57fffa7d5b0480148f993af2f4799d62aa0871 (patch)
tree82b090b67a17ce30166d751ae16ab8f6b32d6b60 /src/login/logind-core.c
parentbf8743c89f67bd0c6016d41ac92ee70e962b74ff (diff)
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.
Diffstat (limited to 'src/login/logind-core.c')
-rw-r--r--src/login/logind-core.c32
1 files changed, 22 insertions, 10 deletions
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