Add ramfs chown/chmod

This commit is contained in:
Mark
2020-07-31 11:22:50 +03:00
parent 37d74f3cd1
commit 97f1db0fcd
+20
View File
@@ -231,6 +231,8 @@ static int ramfs_vnode_creat(struct vnode *at, const char *filename, uid_t uid,
static int ramfs_vnode_truncate(struct vnode *at, size_t size);
static int ramfs_vnode_mkdir(struct vnode *at, const char *filename, uid_t uid, gid_t gid, mode_t mode);
static int ramfs_vnode_unlink(struct vnode *node);
static int ramfs_vnode_chown(struct vnode *node, uid_t uid, gid_t gid);
static int ramfs_vnode_chmod(struct vnode *node, mode_t mode);
static struct vnode_operations _ramfs_vnode_op = {
.open = ramfs_vnode_open,
@@ -242,6 +244,8 @@ static struct vnode_operations _ramfs_vnode_op = {
.mkdir = ramfs_vnode_mkdir,
.truncate = ramfs_vnode_truncate,
.unlink = ramfs_vnode_unlink,
.chown = ramfs_vnode_chown,
.chmod = ramfs_vnode_chmod
};
static int ram_init(struct fs *ramfs, const char *opt) {
@@ -519,6 +523,22 @@ static int ramfs_vnode_truncate(struct vnode *at, size_t size) {
return 0;
}
static int ramfs_vnode_chown(struct vnode *node, uid_t uid, gid_t gid) {
node->uid = uid;
node->gid = gid;
return 0;
}
static int ramfs_vnode_chmod(struct vnode *node, mode_t mode) {
if (node->type == VN_LNK) {
// Ignore
return 0;
}
node->mode &= ~VFS_MODE_MASK;
node->mode |= mode & VFS_MODE_MASK;
return 0;
}
__init(ramfs_init) {
fs_class_register(&_ramfs);
}