diff options
author | sotech117 <michael_foiani@brown.edu> | 2024-05-13 09:27:24 +0000 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2024-05-13 09:27:24 +0000 |
commit | f09878f6327426631d9419d825a4e8396e3b9dc4 (patch) | |
tree | 009d1f1b1386baf6d07b3b7d9a436590ada14094 /kernel/fs/vnode_specials.c | |
parent | 0e2acbe54e5800621692c2f6e9e9590aa369e165 (diff) |
weenix
Diffstat (limited to 'kernel/fs/vnode_specials.c')
-rw-r--r-- | kernel/fs/vnode_specials.c | 39 |
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, |