chiark / gitweb /
initctl: minor updates
[elogind.git] / util.c
diff --git a/util.c b/util.c
index dd4dc097a95aaf2f129cec8076e5bdb14db8c3d7..e9f7813b8b378d13af2b7e322a5aaf9a3f612362 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1140,6 +1140,39 @@ bool path_startswith(const char *path, const char *prefix) {
         }
 }
 
+bool path_equal(const char *a, const char *b) {
+        assert(a);
+        assert(b);
+
+        if ((a[0] == '/') != (b[0] == '/'))
+                return false;
+
+        for (;;) {
+                size_t j, k;
+
+                a += strspn(a, "/");
+                b += strspn(b, "/");
+
+                if (*a == 0 && *b == 0)
+                        return true;
+
+                if (*a == 0 || *b == 0)
+                        return false;
+
+                j = strcspn(a, "/");
+                k = strcspn(b, "/");
+
+                if (j != k)
+                        return false;
+
+                if (memcmp(a, b, j) != 0)
+                        return false;
+
+                a += j;
+                b += k;
+        }
+}
+
 char *ascii_strlower(char *t) {
         char *p;
 
@@ -1215,7 +1248,7 @@ int close_all_fds(const int except[], unsigned n_except) {
         while ((de = readdir(d))) {
                 int fd = -1;
 
-                if (de->d_name[0] == '.')
+                if (ignore_file(de->d_name))
                         continue;
 
                 if ((r = safe_atoi(de->d_name, &fd)) < 0)
@@ -1324,7 +1357,7 @@ int chvt(int vt) {
         if (ioctl(fd, VT_ACTIVATE, vt) < 0)
                 r = -errno;
 
-        close_nointr(r);
+        close_nointr_nofail(r);
         return r;
 }
 
@@ -1612,7 +1645,7 @@ int acquire_terminal(const char *name, bool fail, bool force) {
         }
 
         if (notify >= 0)
-                close_nointr(notify);
+                close_nointr_nofail(notify);
 
         if ((r = reset_terminal(fd)) < 0)
                 log_warning("Failed to reset terminal: %s", strerror(-r));
@@ -1621,10 +1654,10 @@ int acquire_terminal(const char *name, bool fail, bool force) {
 
 fail:
         if (fd >= 0)
-                close_nointr(fd);
+                close_nointr_nofail(fd);
 
         if (notify >= 0)
-                close_nointr(notify);
+                close_nointr_nofail(notify);
 
         return r;
 }