chiark / gitweb /
logind: rework manager_get_{user|session}_by_pid() a bit
authorLennart Poettering <lennart@poettering.net>
Wed, 21 Mar 2018 18:04:45 +0000 (19:04 +0100)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
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.

src/login/logind-core.c

index 53b11340d899b34d67a8adf3bbf4cee956e965e3..0aa22b8af61261eb4fd869ba88c8f7a9c82cf235 100644 (file)
@@ -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