]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/unit: extract checking of stat paths into helper function
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 31 Mar 2016 04:08:34 +0000 (00:08 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 31 Mar 2016 04:38:50 +0000 (00:38 -0400)
The same code was repeated three times.

src/core/unit.c

index af38beb0c3cc9c9f3bc6e10c7fdc26a69b07f63f..64d5ed04c990267e55947d8cbe7477e35018d930 100644 (file)
@@ -2924,34 +2924,32 @@ int unit_coldplug(Unit *u) {
         return 0;
 }
 
+static bool fragment_mtime_changed(const char *path, usec_t mtime) {
+        struct stat st;
+
+        if (!path)
+                return false;
+
+        if (stat(path, &st) < 0)
+                /* What, cannot access this anymore? */
+                return true;
+
+        if (mtime > 0 && timespec_load(&st.st_mtim) != mtime)
+                return true;
+
+        return false;
+}
+
 bool unit_need_daemon_reload(Unit *u) {
         _cleanup_strv_free_ char **t = NULL;
         char **path;
-        struct stat st;
         unsigned loaded_cnt, current_cnt;
 
         assert(u);
 
-        if (u->fragment_path) {
-                zero(st);
-                if (stat(u->fragment_path, &st) < 0)
-                        /* What, cannot access this anymore? */
-                        return true;
-
-                if (u->fragment_mtime > 0 &&
-                    timespec_load(&st.st_mtim) != u->fragment_mtime)
-                        return true;
-        }
-
-        if (u->source_path) {
-                zero(st);
-                if (stat(u->source_path, &st) < 0)
-                        return true;
-
-                if (u->source_mtime > 0 &&
-                    timespec_load(&st.st_mtim) != u->source_mtime)
-                        return true;
-        }
+        if (fragment_mtime_changed(u->fragment_path, u->fragment_mtime) ||
+            fragment_mtime_changed(u->source_path, u->source_mtime))
+                return true;
 
         (void) unit_find_dropin_paths(u, &t);
         loaded_cnt = strv_length(t);
@@ -2962,21 +2960,15 @@ bool unit_need_daemon_reload(Unit *u) {
                         return false;
 
                 if (strv_overlap(u->dropin_paths, t)) {
-                        STRV_FOREACH(path, u->dropin_paths) {
-                                zero(st);
-                                if (stat(*path, &st) < 0)
-                                        return true;
-
-                                if (u->dropin_mtime > 0 &&
-                                    timespec_load(&st.st_mtim) > u->dropin_mtime)
+                        STRV_FOREACH(path, u->dropin_paths)
+                                if (fragment_mtime_changed(*path, u->dropin_mtime))
                                         return true;
-                        }
 
                         return false;
-                } else
-                        return true;
-        } else
-                return true;
+                }
+        }
+
+        return true;
 }
 
 void unit_reset_failed(Unit *u) {