various: correct laccess() error check
authorMike Yuan <me@yhndnzj.com>
Fri, 4 Oct 2024 19:05:21 +0000 (21:05 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Tue, 8 Oct 2024 15:39:12 +0000 (16:39 +0100)
laccess is our own macro that uses RET_NERRNO.

(cherry picked from commit 7c1dd9e288047a69d4a6a6dd6585725410cfdadd)

src/basic/os-util.c
src/basic/path-lookup.c
src/coredump/coredump.c
src/home/homework-luks.c
src/kernel-install/kernel-install.c
src/libsystemd/sd-daemon/sd-daemon.c
src/shared/condition.c
src/shared/mount-util.c
src/sysext/sysext.c
src/system-update-generator/system-update-generator.c

index 79f641b364743cdfc7dd18f294d34574c88a202a..0c2ff2db1fdc1d864fc57546e86534853e112e00 100644 (file)
@@ -97,8 +97,9 @@ int path_is_extension_tree(ImageClass image_class, const char *path, const char
         /* Does the path exist at all? If not, generate an error immediately. This is useful so that a missing root dir
          * always results in -ENOENT, and we can properly distinguish the case where the whole root doesn't exist from
          * the case where just the os-release file is missing. */
-        if (laccess(path, F_OK) < 0)
-                return -errno;
+        r = laccess(path, F_OK);
+        if (r < 0)
+                return r;
 
         /* We use /usr/lib/extension-release.d/extension-release[.NAME] as flag for something being a system extension,
          * /etc/extension-release.d/extension-release[.NAME] as flag for something being a system configuration, and finally,
index 540256b73b84300e39db52bc81e5ffcebb01c370..0166fdcb9d0092a4d19cbb6e5d89e5f918517a53 100644 (file)
@@ -904,6 +904,7 @@ char **env_generator_binary_paths(RuntimeScope runtime_scope) {
 
 int find_portable_profile(const char *name, const char *unit, char **ret_path) {
         const char *dot;
+        int r;
 
         assert(name);
         assert(ret_path);
@@ -917,13 +918,13 @@ int find_portable_profile(const char *name, const char *unit, char **ret_path) {
                 if (!joined)
                         return -ENOMEM;
 
-                if (laccess(joined, F_OK) >= 0) {
+                r = laccess(joined, F_OK);
+                if (r >= 0) {
                         *ret_path = TAKE_PTR(joined);
                         return 0;
                 }
-
-                if (errno != ENOENT)
-                        return -errno;
+                if (r != -ENOENT)
+                        return r;
         }
 
         return -ENOENT;
index f5c4cf550c882cab24d31d3d552967951da8190b..d73060d0d428994d05958485a84605d032d4defc 100644 (file)
@@ -1456,8 +1456,9 @@ static int forward_coredump_to_container(Context *context) {
 
                 pair[0] = safe_close(pair[0]);
 
-                if (laccess("/run/systemd/coredump", W_OK) < 0) {
-                        log_debug_errno(errno, "Cannot find coredump socket, exiting: %m");
+                r = laccess("/run/systemd/coredump", W_OK);
+                if (r < 0) {
+                        log_debug_errno(r, "Cannot find coredump socket, exiting: %m");
                         _exit(EXIT_FAILURE);
                 }
 
index 20ff4c31ace02cbf52a46d2da0ab65c965b7809a..a97384fda953ea770c73d81bb87b55476317ce6a 100644 (file)
@@ -1996,11 +1996,11 @@ static int wait_for_devlink(const char *path) {
                 _cleanup_free_ char *dn = NULL;
                 usec_t w;
 
-                if (laccess(path, F_OK) < 0) {
-                        if (errno != ENOENT)
-                                return log_error_errno(errno, "Failed to determine whether %s exists: %m", path);
-                } else
+                r = laccess(path, F_OK);
+                if (r >= 0)
                         return 0; /* Found it */
+                if (r != -ENOENT)
+                        return log_error_errno(r, "Failed to determine whether %s exists: %m", path);
 
                 if (inotify_fd < 0) {
                         /* We need to wait for the device symlink to show up, let's create an inotify watch for it */
index 27629273e4e773de6031ec2b59f1354e10122ce6..370a1559bc22e34e624b4d1da5acabadd0cad87d 100644 (file)
@@ -1110,12 +1110,10 @@ static int kernel_from_version(const char *version, char **ret_kernel) {
                 return log_oom();
 
         r = laccess(vmlinuz, F_OK);
-        if (r < 0) {
-                if (r == -ENOENT)
-                        return log_error_errno(r, "Kernel image not installed to '%s', requiring manual kernel image path specification.", vmlinuz);
-
+        if (r == -ENOENT)
+                return log_error_errno(r, "Kernel image not installed to '%s', requiring manual kernel image path specification.", vmlinuz);
+        if (r < 0)
                 return log_error_errno(r, "Failed to determine if kernel image is installed to '%s': %m", vmlinuz);
-        }
 
         *ret_kernel = TAKE_PTR(vmlinuz);
         return 0;
index 4945d821501e563a9690ca34e82058332a3c212b..82e677b21509ed55eccc80ae0fbd1334f6355aba 100644 (file)
@@ -738,17 +738,18 @@ _public_ int sd_pid_notifyf_with_fds(
 }
 
 _public_ int sd_booted(void) {
-        /* We test whether the runtime unit file directory has been
-         * created. This takes place in mount-setup.c, so is
-         * guaranteed to happen very early during boot. */
+        int r;
 
-        if (laccess("/run/systemd/system/", F_OK) >= 0)
-                return true;
+        /* We test whether the runtime unit file directory has been created. This takes place in mount-setup.c,
+         * so is guaranteed to happen very early during boot. */
 
-        if (errno == ENOENT)
+        r = laccess("/run/systemd/system/", F_OK);
+        if (r >= 0)
+                return true;
+        if (r == -ENOENT)
                 return false;
 
-        return -errno;
+        return r;
 }
 
 _public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
index 1f72ba8b0f2781a332747e1c9e76a4ff7b77d229..23469f82051c2172995a99089e0788da2c028631 100644 (file)
@@ -169,10 +169,11 @@ static int condition_test_credential(Condition *c, char **env) {
                 if (!j)
                         return -ENOMEM;
 
-                if (laccess(j, F_OK) >= 0)
+                r = laccess(j, F_OK);
+                if (r >= 0)
                         return true; /* yay! */
-                if (errno != ENOENT)
-                        return -errno;
+                if (r != -ENOENT)
+                        return r;
 
                 /* not found in this dir */
         }
index 4ddfb9a82acde0afc5740f1e99a4e5b37737a51b..f932a5eac012f025892291b47840024f9a074dcc 100644 (file)
@@ -427,8 +427,9 @@ int bind_remount_one_with_mountinfo(
 
         fs = mnt_table_find_target(table, path, MNT_ITER_FORWARD);
         if (!fs) {
-                if (laccess(path, F_OK) < 0) /* Hmm, it's not in the mount table, but does it exist at all? */
-                        return -errno;
+                r = laccess(path, F_OK); /* Hmm, it's not in the mount table, but does it exist at all? */
+                if (r < 0)
+                        return r;
 
                 return -EINVAL; /* Not a mount point we recognize */
         }
index c55c24fdf333e9ec0535e71c9a835a598bf32e55..c971f194fb3d9f8f14927d4b5b3f59ae19dfd997 100644 (file)
@@ -1748,13 +1748,11 @@ static int merge_subprocess(
                 if (!p)
                         return log_oom();
 
-                if (laccess(p, F_OK) < 0) {
-                        if (errno != ENOENT)
-                                return log_error_errno(errno, "Failed to check if '%s' exists: %m", p);
-
-                        /* Hierarchy apparently was empty in all extensions, and wasn't mounted, ignoring. */
+                r = laccess(p, F_OK);
+                if (r == -ENOENT) /* Hierarchy apparently was empty in all extensions, and wasn't mounted, ignoring. */
                         continue;
-                }
+                if (r < 0)
+                        return log_error_errno(r, "Failed to check if '%s' exists: %m", p);
 
                 r = chase(*h, arg_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &resolved, NULL);
                 if (r < 0)
index a1782d5c059524fd74329811cc02546c377532bb..d8845306747dc6315fc553c560634b89bd033235 100644 (file)
 static const char *arg_dest = NULL;
 
 static int generate_symlink(void) {
+        int r;
+
         FOREACH_STRING(p, "/system-update", "/etc/system-update") {
-                if (laccess(p, F_OK) >= 0) {
-                        _cleanup_free_ char *j = NULL;
+                r = laccess(p, F_OK);
+                if (r < 0) {
+                        if (r != -ENOENT)
+                                log_warning_errno(r, "Failed to check if %s symlink exists, ignoring: %m", p);
+                        continue;
+                }
 
-                        j = path_join(arg_dest, SPECIAL_DEFAULT_TARGET);
-                        if (!j)
-                                return log_oom();
+                _cleanup_free_ char *j = NULL;
 
-                        if (symlink(SYSTEM_DATA_UNIT_DIR "/system-update.target", j) < 0)
-                                return log_error_errno(errno, "Failed to create symlink %s: %m", j);
+                j = path_join(arg_dest, SPECIAL_DEFAULT_TARGET);
+                if (!j)
+                        return log_oom();
 
-                        return 1;
-                }
+                if (symlink(SYSTEM_DATA_UNIT_DIR "/system-update.target", j) < 0)
+                        return log_error_errno(errno, "Failed to create symlink %s: %m", j);
 
-                if (errno != ENOENT)
-                        log_warning_errno(errno, "Failed to check if %s symlink exists, ignoring: %m", p);
+                return 1;
         }
 
         return 0;