chiark / gitweb /
util: replace close_nointr_nofail() by a more useful safe_close()
[elogind.git] / src / tmpfiles / tmpfiles.c
index 52f80379e38e86fcd203bbf1405d18f848fd46b6..33e7cbc05d2dcab940690102c0740d2dd9502d52 100644 (file)
@@ -496,7 +496,7 @@ static int write_one_file(Item *i, const char *path) {
 
                 unescaped = cunescape(i->argument);
                 if (unescaped == NULL) {
-                        close_nointr_nofail(fd);
+                        safe_close(fd);
                         return log_oom();
                 }
 
@@ -505,12 +505,12 @@ static int write_one_file(Item *i, const char *path) {
 
                 if (n < 0 || (size_t) n < l) {
                         log_error("Failed to write file %s: %s", path, n < 0 ? strerror(-n) : "Short write");
-                        close_nointr_nofail(fd);
+                        safe_close(fd);
                         return n < 0 ? n : -EIO;
                 }
         }
 
-        close_nointr_nofail(fd);
+        safe_close(fd);
 
         if (stat(path, &st) < 0) {
                 log_error("stat(%s) failed: %m", path);
@@ -542,7 +542,7 @@ static int recursive_relabel_children(Item *i, const char *path) {
 
         for (;;) {
                 struct dirent *de;
-                bool is_dir;
+                bool dir;
                 int r;
                 _cleanup_free_ char *entry_path = NULL;
 
@@ -567,18 +567,17 @@ static int recursive_relabel_children(Item *i, const char *path) {
                 }
 
                 if (de->d_type == DT_UNKNOWN) {
-                        struct stat st;
-
-                        if (lstat(entry_path, &st) < 0) {
+                        r = is_dir(entry_path);
+                        if (r < 0) {
                                 if (ret == 0 && errno != ENOENT)
                                         ret = -errno;
                                 continue;
                         }
 
-                        is_dir = S_ISDIR(st.st_mode);
+                        dir = r;
 
                 } else
-                        is_dir = de->d_type == DT_DIR;
+                        dir = de->d_type == DT_DIR;
 
                 r = item_set_perms(i, entry_path);
                 if (r < 0) {
@@ -587,7 +586,7 @@ static int recursive_relabel_children(Item *i, const char *path) {
                         continue;
                 }
 
-                if (is_dir) {
+                if (dir) {
                         r = recursive_relabel_children(i, entry_path);
                         if (r < 0 && ret == 0)
                                 ret = r;