chiark / gitweb /
util: add delete_chars() call
[elogind.git] / util.c
diff --git a/util.c b/util.c
index f3af9567cf49cb79043977511e52b2112e0361b9..939b2b06e9ddb2da442f688e30a596ed449b6837 100644 (file)
--- a/util.c
+++ b/util.c
@@ -611,6 +611,23 @@ char *strstrip(char *s) {
 
 }
 
+char *delete_chars(char *s, const char *bad) {
+        char *f, *t;
+
+        /* Drops all whitespace, regardless where in the string */
+
+        for (f = s, t = s; *f; f++) {
+                if (strchr(bad, *f))
+                        continue;
+
+                *(t++) = *f;
+        }
+
+        *t = 0;
+
+        return s;
+}
+
 char *file_in_same_dir(const char *path, const char *filename) {
         char *e, *r;
         size_t k;
@@ -1133,7 +1150,7 @@ int close_all_fds(const int except[], unsigned n_except) {
                 return -errno;
 
         while ((de = readdir(d))) {
-                int fd;
+                int fd = -1;
 
                 if (de->d_name[0] == '.')
                         continue;
@@ -1162,10 +1179,15 @@ int close_all_fds(const int except[], unsigned n_except) {
                                 continue;
                 }
 
-                if ((r = close_nointr(fd)) < 0)
-                        goto finish;
+                if ((r = close_nointr(fd)) < 0) {
+                        /* Valgrind has its own FD and doesn't want to have it closed */
+                        if (errno != EBADF)
+                                goto finish;
+                }
         }
 
+        r = 0;
+
 finish:
         closedir(d);
         return r;