#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;
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;
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] == '/')
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,
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;
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;