diff --git a/fs/ram.c b/fs/ram.c index 092e141..13c5bb0 100644 --- a/fs/ram.c +++ b/fs/ram.c @@ -228,6 +228,7 @@ static ssize_t ramfs_vnode_read(struct ofile *of, void *buf, size_t count); static ssize_t ramfs_vnode_write(struct ofile *of, const void *buf, size_t count); static off_t ramfs_vnode_lseek(struct ofile *of, off_t off, int whence); static int ramfs_vnode_creat(struct vnode *at, const char *filename, uid_t uid, gid_t gid, mode_t mode); +static int ramfs_vnode_mknod(struct vnode *at, struct vnode *node); 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); @@ -239,6 +240,7 @@ static struct vnode_operations _ramfs_vnode_op = { .write = ramfs_vnode_write, .lseek = ramfs_vnode_lseek, .creat = ramfs_vnode_creat, + .mknod = ramfs_vnode_mknod, .mkdir = ramfs_vnode_mkdir, .truncate = ramfs_vnode_truncate, .unlink = ramfs_vnode_unlink, @@ -307,6 +309,9 @@ static int ramfs_vnode_stat(struct vnode *vn, struct stat *st) { case VN_DIR: st->st_mode |= S_IFDIR; break; + case VN_SOCK: + st->st_mode |= S_IFSOCK; + break; default: panic("TODO\n"); } @@ -467,6 +472,16 @@ static int ramfs_vnode_creat(struct vnode *at, const char *filename, uid_t uid, return 0; } +static int ramfs_vnode_mknod(struct vnode *at, struct vnode *node) { + _assert(at && at->type == VN_DIR); + _assert(node); + + node->op = &_ramfs_vnode_op; + vnode_attach(at, node); + + return 0; +} + static int ramfs_vnode_mkdir(struct vnode *at, const char *filename, uid_t uid, gid_t gid, mode_t mode) { struct vnode *vn = ram_vnode_create(VN_DIR, filename); if (!vn) {