]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/manager: correct and simplify errno handling
authorMike Yuan <me@yhndnzj.com>
Thu, 23 Nov 2023 12:38:29 +0000 (20:38 +0800)
committerMike Yuan <me@yhndnzj.com>
Thu, 23 Nov 2023 12:42:44 +0000 (20:42 +0800)
open_parent() is our own function that returns negative errno.

src/core/manager.c

index 8c8a25826e727e2ead0053efeab6aa14810a8f4e..dadfc513698ac7600d9eb574eb82427684f4afa5 100644 (file)
@@ -1032,23 +1032,23 @@ int manager_new(RuntimeScope runtime_scope, ManagerTestRunFlags test_run_flags,
 
                 self_dir_fd = open_parent(self_exe, O_CLOEXEC|O_DIRECTORY, 0);
                 if (self_dir_fd < 0)
-                        return -errno;
+                        return self_dir_fd;
 
-                m->executor_fd = openat(self_dir_fd, "systemd-executor", O_CLOEXEC|O_PATH);
-                if (m->executor_fd < 0 && errno == ENOENT)
-                        m->executor_fd = openat(AT_FDCWD, "systemd-executor", O_CLOEXEC|O_PATH);
-                if (m->executor_fd < 0 && errno == ENOENT) {
-                        m->executor_fd = open(SYSTEMD_EXECUTOR_BINARY_PATH, O_CLOEXEC|O_PATH);
+                m->executor_fd = RET_NERRNO(openat(self_dir_fd, "systemd-executor", O_CLOEXEC|O_PATH));
+                if (m->executor_fd == -ENOENT)
+                        m->executor_fd = RET_NERRNO(openat(AT_FDCWD, "systemd-executor", O_CLOEXEC|O_PATH));
+                if (m->executor_fd == -ENOENT) {
+                        m->executor_fd = RET_NERRNO(open(SYSTEMD_EXECUTOR_BINARY_PATH, O_CLOEXEC|O_PATH));
                         level = LOG_WARNING; /* Tests should normally use local builds */
                 }
                 if (m->executor_fd < 0)
-                        return -errno;
+                        return m->executor_fd;
 
                 r = fd_get_path(m->executor_fd, &executor_path);
                 if (r < 0)
                         return r;
 
-                log_full(level, "Using systemd-executor binary from '%s'", executor_path);
+                log_full(level, "Using systemd-executor binary from '%s'.", executor_path);
         }
 
         /* Note that we do not set up the notify fd here. We do that after deserialization,