From 02f7a2f4cbfcde93d25ec826ba91b1ffafe78bf4 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Wed, 4 Mar 2009 00:53:57 +0000 Subject: [PATCH] Implemented vfs_get_file_map() and vfs_lookup_vnode(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29393 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../server/haiku/HaikuKernelVolume.cpp | 8 ++++++ .../server/haiku/HaikuKernelVolume.h | 2 ++ .../server/haiku/haiku_kernel_emu.cpp | 27 +++++++++++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) 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; }