aboutsummaryrefslogtreecommitdiff
path: root/kernel/fs/vnode_specials.c
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-05-13 09:27:24 +0000
committersotech117 <michael_foiani@brown.edu>2024-05-13 09:27:24 +0000
commitf09878f6327426631d9419d825a4e8396e3b9dc4 (patch)
tree009d1f1b1386baf6d07b3b7d9a436590ada14094 /kernel/fs/vnode_specials.c
parent0e2acbe54e5800621692c2f6e9e9590aa369e165 (diff)
weenix
Diffstat (limited to 'kernel/fs/vnode_specials.c')
-rw-r--r--kernel/fs/vnode_specials.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/kernel/fs/vnode_specials.c b/kernel/fs/vnode_specials.c
index fb6df0b..d8c79bd 100644
--- a/kernel/fs/vnode_specials.c
+++ b/kernel/fs/vnode_specials.c
@@ -159,20 +159,47 @@ static long chardev_file_write(vnode_t *file, size_t pos, const void *buf,
*/
static long chardev_file_mmap(vnode_t *file, mobj_t **ret)
{
- NOT_YET_IMPLEMENTED("VM: chardev_file_mmap");
- return 0;
+ // NOT_YET_IMPLEMENTED("VM: chardev_file_mmap");
+
+ // check if the vnode represents a chardev
+ chardev_t *dev = file->vn_dev.chardev;
+ if (dev == NULL)
+ {
+ return -ENXIO;
+ }
+
+ // call the chardev's mmap operation
+ return dev->cd_ops->mmap(file, ret);
}
static long chardev_file_fill_pframe(vnode_t *file, pframe_t *pf)
{
- NOT_YET_IMPLEMENTED("VM: chardev_file_fill_pframe");
- return 0;
+ // NOT_YET_IMPLEMENTED("VM: chardev_file_fill_pframe");
+
+ // check if the vnode represents a chardev
+ chardev_t *dev = file->vn_dev.chardev;
+ if (dev == NULL)
+ {
+ return -ENXIO;
+ }
+
+ // call the chardev's fill_pframe operation
+ return dev->cd_ops->fill_pframe(file, pf);
}
static long chardev_file_flush_pframe(vnode_t *file, pframe_t *pf)
{
- NOT_YET_IMPLEMENTED("VM: chardev_file_flush_pframe");
- return 0;
+ // NOT_YET_IMPLEMENTED("VM: chardev_file_flush_pframe");
+
+ // check if the vnode represents a chardev
+ chardev_t *dev = file->vn_dev.chardev;
+ if (dev == NULL)
+ {
+ return -ENXIO;
+ }
+
+ // call the chardev's flush_pframe operation
+ return dev->cd_ops->flush_pframe(file, pf);
}
static ssize_t blockdev_file_read(vnode_t *file, size_t pos, void *buf,