chiark / gitweb /
delete name_list, move common file functions
[elogind.git] / udev / udev-util-file.c
index 84ff09e0506925a805149f712eb8310c20bfad5a..29c0d2c14a59a0ce8264015d13390866f372da0e 100644 (file)
 
 #include "udev.h"
 
 
 #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;
 int file_map(const char *filename, char **buf, size_t *bufsize)
 {
        struct stat stats;