diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.cpp b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.cpp index f614f56076..5c6cc1b5bd 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.cpp @@ -144,6 +144,14 @@ HaikuKernelVolume::UndoPublishVNode(HaikuKernelNode* node) } +// NodeWithID +HaikuKernelNode* +HaikuKernelVolume::NodeWithID(ino_t vnodeID) const +{ + return fNodes->Get(vnodeID); +} + + // #pragma mark - // #pragma mark ----- FS ----- diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.h b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.h index 8ba21e0c9e..149301a474 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.h +++ b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/HaikuKernelVolume.h @@ -33,6 +33,8 @@ public: void UndoNewVNode(HaikuKernelNode* node); void UndoPublishVNode(HaikuKernelNode* node); + HaikuKernelNode* NodeWithID(ino_t vnodeID) const; + // FS virtual status_t Mount(const char* device, uint32 flags, const char* parameters, ino_t* rootID); diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp index fa763ad02f..f4de1b7148 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp @@ -1,4 +1,7 @@ -// beos_kernel_emu.cpp +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ #include #include @@ -12,6 +15,7 @@ #include "Debug.h" +#include "../FileSystem.h" #include "../kernel_emu.h" #include "HaikuKernelNode.h" @@ -251,16 +255,29 @@ status_t vfs_get_file_map(struct vnode *vnode, off_t offset, size_t size, struct file_io_vec *vecs, size_t *_count) { - // TODO: Implement! - return B_BAD_VALUE; + HaikuKernelNode* node = (HaikuKernelNode*)vnode; + + return node->volume->GetFileMap(node, offset, size, vecs, _count); } status_t vfs_lookup_vnode(dev_t mountID, ino_t vnodeID, struct vnode **_vnode) { - // TODO: Implement! - return B_BAD_VALUE; + // get the volume + HaikuKernelVolume* volume = dynamic_cast( + FileSystem::GetInstance()->VolumeWithID(mountID)); + if (volume == NULL) + return B_BAD_VALUE; + + // get the node + HaikuKernelNode* node = volume->NodeWithID(vnodeID); + if (node == NULL) + return B_BAD_VALUE; + + *_vnode = (struct vnode*)node; + + return B_OK; }