X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Fudev-util-file.c;h=29c0d2c14a59a0ce8264015d13390866f372da0e;hp=84ff09e0506925a805149f712eb8310c20bfad5a;hb=a390e6f764087b74b1567e1daf1f1c41eae42c74;hpb=daa849db6faf73fd712b6ff8fc63adcd7d82f178 diff --git a/udev/udev-util-file.c b/udev/udev-util-file.c index 84ff09e05..29c0d2c14 100644 --- a/udev/udev-util-file.c +++ b/udev/udev-util-file.c @@ -29,101 +29,6 @@ #include "udev.h" -int create_path(struct udev *udev, const char *path) -{ - char p[UTIL_PATH_SIZE]; - char *pos; - struct stat stats; - int ret; - - util_strlcpy(p, path, sizeof(p)); - pos = strrchr(p, '/'); - if (pos == p || pos == NULL) - return 0; - - while (pos[-1] == '/') - pos--; - pos[0] = '\0'; - - dbg(udev, "stat '%s'\n", p); - if (stat(p, &stats) == 0 && (stats.st_mode & S_IFMT) == S_IFDIR) - return 0; - - if (create_path(udev, p) != 0) - return -1; - - dbg(udev, "mkdir '%s'\n", p); - udev_selinux_setfscreatecon(udev, p, S_IFDIR|0755); - ret = mkdir(p, 0755); - udev_selinux_resetfscreatecon(udev); - if (ret == 0) - return 0; - - if (errno == EEXIST) - if (stat(p, &stats) == 0 && (stats.st_mode & S_IFMT) == S_IFDIR) - return 0; - return -1; -} - -int delete_path(struct udev *udev, const char *path) -{ - char p[UTIL_PATH_SIZE]; - char *pos; - int retval; - - strcpy (p, path); - pos = strrchr(p, '/'); - if (pos == p || pos == NULL) - return 0; - - while (1) { - *pos = '\0'; - pos = strrchr(p, '/'); - - /* don't remove the last one */ - 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); - break; - } - dbg(udev, "removed '%s'\n", p); - } - return 0; -} - -/* Reset permissions on the device node, before unlinking it to make sure, - * that permisions of possible hard links will be removed too. - */ -int unlink_secure(struct udev *udev, const char *filename) -{ - int retval; - - retval = chown(filename, 0, 0); - if (retval) - err(udev, "chown(%s, 0, 0) failed: %m\n", filename); - - retval = chmod(filename, 0000); - if (retval) - err(udev, "chmod(%s, 0000) failed: %m\n", filename); - - retval = unlink(filename); - if (errno == ENOENT) - retval = 0; - - if (retval) - err(udev, "unlink(%s) failed: %m\n", filename); - - return retval; -} - int file_map(const char *filename, char **buf, size_t *bufsize) { struct stat stats;