chiark / gitweb /
trivial cleanups
[elogind.git] / libudev / libudev-util-private.c
index c05c157575aa084716afab0f413c147f791bded3..073f7e2df8fa1b54d28f079ba48b89e3e98232b3 100644 (file)
@@ -25,7 +25,7 @@
 #include "libudev.h"
 #include "libudev-private.h"
 
-int util_create_path(struct udev *udev, const char *path)
+static int create_path(struct udev *udev, const char *path, bool selinux)
 {
        char p[UTIL_PATH_SIZE];
        char *pos;
@@ -55,7 +55,8 @@ int util_create_path(struct udev *udev, const char *path)
                return err;
 
        dbg(udev, "mkdir '%s'\n", p);
-       udev_selinux_setfscreatecon(udev, p, S_IFDIR|0755);
+       if (selinux)
+               udev_selinux_setfscreatecon(udev, p, S_IFDIR|0755);
        err = mkdir(p, 0755);
        if (err != 0) {
                err = -errno;
@@ -66,15 +67,26 @@ int util_create_path(struct udev *udev, const char *path)
                                err = -ENOTDIR;
                }
        }
-       udev_selinux_resetfscreatecon(udev);
+       if (selinux)
+               udev_selinux_resetfscreatecon(udev);
        return err;
 }
 
+int util_create_path(struct udev *udev, const char *path)
+{
+       return create_path(udev, path, false);
+}
+
+int util_create_path_selinux(struct udev *udev, const char *path)
+{
+       return create_path(udev, path, true);
+}
+
 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 +96,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 +104,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,
@@ -127,7 +134,7 @@ int util_unlink_secure(struct udev *udev, const char *filename)
 uid_t util_lookup_user(struct udev *udev, const char *user)
 {
        char *endptr;
-       int buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
+       size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
        char buf[buflen];
        struct passwd pwbuf;
        struct passwd *pw;
@@ -152,7 +159,7 @@ uid_t util_lookup_user(struct udev *udev, const char *user)
 gid_t util_lookup_group(struct udev *udev, const char *group)
 {
        char *endptr;
-       int buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+       size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
        char *buf;
        struct group grbuf;
        struct group *gr;
@@ -254,7 +261,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 +356,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 +461,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);