From 97f1db0fcdbc0c860a629ab96fd49fa6f5750a8f Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 31 Jul 2020 11:22:50 +0300 Subject: [PATCH] Add ramfs chown/chmod --- fs/ram.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fs/ram.c b/fs/ram.c index 092e141..8cad1e3 100644 --- a/fs/ram.c +++ b/fs/ram.c @@ -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); }