]> wimlib.net Git - wimlib/blobdiff - src/mount.c
Remove link_dentry()
[wimlib] / src / mount.c
index b9da36e172f5f1e5e11702a56325db4f57941409..e10287a6f58aa918aaa06852ba31b9a3ab1d5e25 100644 (file)
@@ -746,6 +746,28 @@ static int wimfs_access(const char *path, int mask)
        return 0;
 }
 
        return 0;
 }
 
+static int wimfs_chmod(const char *path, mode_t mask)
+{
+       struct dentry *dentry;
+       struct wimfs_context *ctx = wimfs_get_context();
+       struct inode *inode;
+       struct stat stbuf;
+       int ret;
+
+       ret = lookup_resource(ctx->wim, path,
+                             get_lookup_flags(ctx) | LOOKUP_FLAG_DIRECTORY_OK,
+                             &dentry, NULL, NULL);
+       if (ret != 0)
+               return ret;
+       inode = dentry->d_inode;
+       inode_to_stbuf(inode, NULL, &stbuf);
+       if (mask == stbuf.st_mode)
+               return 0;
+       else
+               return -EPERM;
+
+}
+
 static void inode_update_lte_ptr(struct inode *inode,
                                 struct lookup_table_entry *old_lte,
                                 struct lookup_table_entry *new_lte)
 static void inode_update_lte_ptr(struct inode *inode,
                                 struct lookup_table_entry *old_lte,
                                 struct lookup_table_entry *new_lte)
@@ -1064,7 +1086,7 @@ static int wimfs_link(const char *to, const char *from)
                        lte->refcnt++;
        }
 
                        lte->refcnt++;
        }
 
-       link_dentry(from_dentry, from_dentry_parent);
+       dentry_add_child(from_dentry_parent, from_dentry);
        return 0;
 }
 
        return 0;
 }
 
@@ -1130,7 +1152,7 @@ static int wimfs_mkdir(const char *path, mode_t mode)
        newdir->d_inode->attributes |= FILE_ATTRIBUTE_DIRECTORY;
        newdir->d_inode->resolved = true;
        newdir->d_inode->ino = ctx->next_ino++;
        newdir->d_inode->attributes |= FILE_ATTRIBUTE_DIRECTORY;
        newdir->d_inode->resolved = true;
        newdir->d_inode->ino = ctx->next_ino++;
-       link_dentry(newdir, parent);
+       dentry_add_child(parent, newdir);
        return 0;
 }
 
        return 0;
 }
 
@@ -1182,7 +1204,7 @@ static int wimfs_mknod(const char *path, mode_t mode, dev_t rdev)
                        return -ENOMEM;
                dentry->d_inode->resolved = true;
                dentry->d_inode->ino = ctx->next_ino++;
                        return -ENOMEM;
                dentry->d_inode->resolved = true;
                dentry->d_inode->ino = ctx->next_ino++;
-               link_dentry(dentry, parent);
+               dentry_add_child(parent, dentry);
        }
        return 0;
 }
        }
        return 0;
 }
@@ -1469,7 +1491,7 @@ static int wimfs_rename(const char *from, const char *to)
        src->file_name_utf8_len = file_name_utf8_len;
 
        unlink_dentry(src);
        src->file_name_utf8_len = file_name_utf8_len;
 
        unlink_dentry(src);
-       link_dentry(src, parent_of_dst);
+       dentry_add_child(parent_of_dst, src);
        return 0;
 }
 
        return 0;
 }
 
@@ -1589,7 +1611,7 @@ static int wimfs_symlink(const char *to, const char *from)
        if (inode_set_symlink(inode, to, ctx->wim->lookup_table, NULL) != 0)
                goto out_free_dentry;
 
        if (inode_set_symlink(inode, to, ctx->wim->lookup_table, NULL) != 0)
                goto out_free_dentry;
 
-       link_dentry(dentry, dentry_parent);
+       dentry_add_child(dentry_parent, dentry);
        return 0;
 out_free_dentry:
        free_dentry(dentry);
        return 0;
 out_free_dentry:
        free_dentry(dentry);
@@ -1747,6 +1769,7 @@ static int wimfs_write(const char *path, const char *buf, size_t size,
 
 static struct fuse_operations wimfs_operations = {
        .access      = wimfs_access,
 
 static struct fuse_operations wimfs_operations = {
        .access      = wimfs_access,
+       .chmod       = wimfs_chmod,
        .destroy     = wimfs_destroy,
 #if 0
        .fallocate   = wimfs_fallocate,
        .destroy     = wimfs_destroy,
 #if 0
        .fallocate   = wimfs_fallocate,