1250840Smarcel/* 2250840Smarcel * Copyright 2009-2013, Ingo Weinhold, ingo_weinhold@gmx.de. 3250840Smarcel * Distributed under the terms of the MIT License. 4250840Smarcel */ 5250840Smarcel#ifndef LEAF_NODE_H 6250840Smarcel#define LEAF_NODE_H 7250840Smarcel 8250840Smarcel 9250840Smarcel#include "Node.h" 10250840Smarcel#include "PackageLeafNode.h" 11250840Smarcel#include "UnpackingNode.h" 12250840Smarcel 13250840Smarcel 14250840Smarcelclass UnpackingLeafNode : public Node, public UnpackingNode { 15250840Smarcelpublic: 16250840Smarcel UnpackingLeafNode(ino_t id); 17250840Smarcel virtual ~UnpackingLeafNode(); 18250840Smarcel 19250840Smarcel virtual status_t VFSInit(dev_t deviceID); 20250840Smarcel virtual void VFSUninit(); 21250840Smarcel 22250840Smarcel virtual mode_t Mode() const; 23250840Smarcel virtual uid_t UserID() const; 24250840Smarcel virtual gid_t GroupID() const; 25250840Smarcel virtual timespec ModifiedTime() const; 26250840Smarcel virtual off_t FileSize() const; 27250840Smarcel 28250840Smarcel virtual Node* GetNode(); 29250840Smarcel 30250840Smarcel virtual status_t AddPackageNode(PackageNode* packageNode, 31250840Smarcel dev_t deviceID); 32250840Smarcel virtual void RemovePackageNode(PackageNode* packageNode, 33250840Smarcel dev_t deviceID); 34250840Smarcel 35250840Smarcel virtual PackageNode* GetPackageNode(); 36250840Smarcel virtual bool IsOnlyPackageNode(PackageNode* node) const; 37250840Smarcel virtual bool WillBeFirstPackageNode( 38257144Snwhitehorn PackageNode* packageNode) const; 39257144Snwhitehorn 40257144Snwhitehorn virtual void PrepareForRemoval(); 41257144Snwhitehorn virtual status_t CloneTransferPackageNodes(ino_t id, 42250840Smarcel UnpackingNode*& _newNode); 43250840Smarcel 44250840Smarcel virtual status_t Read(off_t offset, void* buffer, 45250840Smarcel size_t* bufferSize); 46250840Smarcel virtual status_t Read(io_request* request); 47250840Smarcel 48250840Smarcel virtual status_t ReadSymlink(void* buffer, 49250840Smarcel size_t* bufferSize); 50250840Smarcel 51250840Smarcel virtual status_t OpenAttributeDirectory( 52250840Smarcel AttributeDirectoryCookie*& _cookie); 53250840Smarcel virtual status_t OpenAttribute(const StringKey& name, 54250840Smarcel int openMode, AttributeCookie*& _cookie); 55250840Smarcel 56250840Smarcel virtual status_t IndexAttribute(AttributeIndexer* indexer); 57250840Smarcel virtual void* IndexCookieForAttribute(const StringKey& name) 58250840Smarcel const; 59250840Smarcel 60250840Smarcelprivate: 61250840Smarcel inline PackageLeafNode* _ActivePackageNode() const; 62250840Smarcel 63250840Smarcelprivate: 64250840Smarcel PackageLeafNodeList fPackageNodes; 65250840Smarcel PackageLeafNode* fFinalPackageNode; 66250840Smarcel}; 67250840Smarcel 68250840Smarcel 69250840Smarcel#endif // LEAF_NODE_H 70250840Smarcel