chiark / gitweb /
call util_delete_path() only when we actually deleted stuff
[elogind.git] / libudev / libudev-util-private.c
index c05c157575aa084716afab0f413c147f791bded3..6b68b6a3660edef1edaee98625f3c338e92b2fc2 100644 (file)
@@ -74,7 +74,7 @@ int util_delete_path(struct udev *udev, const char *path)
 {
        char p[UTIL_PATH_SIZE];
        char *pos;
-       int retval;
+       int err = 0;
 
        if (path[0] == '/')
                while(path[1] == '/')
@@ -84,7 +84,7 @@ int util_delete_path(struct udev *udev, const char *path)
        if (pos == p || pos == NULL)
                return 0;
 
-       while (1) {
+       for (;;) {
                *pos = '\0';
                pos = strrchr(p, '/');
 
@@ -92,19 +92,14 @@ int util_delete_path(struct udev *udev, const char *path)
                if ((pos == p) || (pos == NULL))
                        break;
 
-               /* remove if empty */
-               retval = rmdir(p);
-               if (errno == ENOENT)
-                       retval = 0;
-               if (retval) {
-                       if (errno == ENOTEMPTY)
-                               return 0;
-                       err(udev, "rmdir(%s) failed: %m\n", p);
+               err = rmdir(p);
+               if (err < 0) {
+                       if (errno == ENOENT)
+                               err = 0;
                        break;
                }
-               dbg(udev, "removed '%s'\n", p);
        }
-       return 0;
+       return err;
 }
 
 /* Reset permissions on the device node, before unlinking it to make sure,
@@ -254,7 +249,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string,
 
 int util_run_program(struct udev *udev, const char *command, char **envp,
                     char *result, size_t ressize, size_t *reslen,
-                    const sigset_t *sigmask)
+                    const sigset_t *sigmask, bool reset_prio)
 {
        int status;
        int outpipe[2] = {-1, -1};
@@ -349,6 +344,8 @@ int util_run_program(struct udev *udev, const char *command, char **envp,
 
                if (sigmask)
                        sigprocmask(SIG_SETMASK, sigmask, NULL);
+               if (reset_prio)
+                       setpriority(PRIO_PROCESS, 0, 0);
 
                execve(argv[0], argv, envp);
                if (errno == ENOENT || errno == ENOTDIR) {
@@ -452,7 +449,7 @@ int util_run_program(struct udev *udev, const char *command, char **envp,
                        if (errpipe[READ_END] > 0)
                                close(errpipe[READ_END]);
 
-                       /* return the childs stdout string */
+                       /* return the child's stdout string */
                        if (result) {
                                result[respos] = '\0';
                                dbg(udev, "result='%s'\n", result);