1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef USERLAND_FS_HAIKU_KERNEL_NODE_H 6#define USERLAND_FS_HAIKU_KERNEL_NODE_H 7 8#include <fs_interface.h> 9#include <SupportDefs.h> 10 11#include <util/OpenHashTable.h> 12 13#include "FSCapabilities.h" 14 15 16namespace UserlandFS { 17 18class HaikuKernelVolume; 19 20using UserlandFSUtil::FSVNodeCapabilities; 21 22 23struct HaikuKernelNode : fs_vnode { 24 struct Capabilities; 25 26 ino_t id; 27 HaikuKernelVolume* volume; 28 Capabilities* capabilities; 29 bool published; 30 31public: 32 inline HaikuKernelNode(HaikuKernelVolume* volume, 33 ino_t vnodeID, void* privateNode, 34 fs_vnode_ops* ops, 35 Capabilities* capabilities); 36 ~HaikuKernelNode(); 37 38 static HaikuKernelNode* GetNode(fs_vnode* node); 39 40 HaikuKernelVolume* GetVolume() const { return volume; } 41}; 42 43 44struct HaikuKernelNode::Capabilities { 45 int32 refCount; 46 fs_vnode_ops* ops; 47 FSVNodeCapabilities capabilities; 48 Capabilities* hashLink; 49 50 Capabilities(fs_vnode_ops* ops, FSVNodeCapabilities capabilities) 51 : 52 refCount(1), 53 ops(ops), 54 capabilities(capabilities) 55 { 56 } 57}; 58 59 60HaikuKernelNode::HaikuKernelNode(HaikuKernelVolume* volume, ino_t vnodeID, 61 void* privateNode, fs_vnode_ops* ops, Capabilities* capabilities) 62 : 63 id(vnodeID), 64 volume(volume), 65 capabilities(capabilities), 66 published(false) 67{ 68 this->private_node = privateNode; 69 this->ops = ops; 70} 71 72 73/*static*/ inline HaikuKernelNode* 74HaikuKernelNode::GetNode(fs_vnode* node) 75{ 76 return static_cast<HaikuKernelNode*>(node); 77} 78 79 80} // namespace UserlandFS 81 82using UserlandFS::HaikuKernelNode; 83 84#endif // USERLAND_FS_NODE_H 85