Node: Keep track of VFS init status

* Node::VFSInit() and VFSUninit() set/clear the new node flag
  NODE_FLAG_KNOWN_TO_VFS. They need to be called by overriding methods,
  now.
* Add Node::IsKnownToVFS() which returns the VFS init status.
This commit is contained in:
Ingo Weinhold 2011-07-21 19:05:50 +02:00
parent d9ec209546
commit bbf2abc503
3 changed files with 28 additions and 3 deletions

View File

@ -56,6 +56,7 @@ Node::Init(Directory* parent, const char* name, uint32 flags)
status_t
Node::VFSInit(dev_t deviceID)
{
fFlags |= NODE_FLAG_KNOWN_TO_VFS;
return B_OK;
}
@ -63,6 +64,7 @@ Node::VFSInit(dev_t deviceID)
void
Node::VFSUninit()
{
fFlags &= ~(uint32)NODE_FLAG_KNOWN_TO_VFS;
}

View File

@ -32,7 +32,9 @@ enum {
NODE_FLAG_CONST_NAME = 0x02,
// Init(): The given name is a constant that won't go away during the
// lifetime of the object. No need to copy.
NODE_FLAG_OWNS_NAME = NODE_FLAG_KEEP_NAME
NODE_FLAG_OWNS_NAME = NODE_FLAG_KEEP_NAME,
NODE_FLAG_KNOWN_TO_VFS = 0x04,
// internal flag
};
@ -61,7 +63,11 @@ public:
// so also on error.
virtual status_t VFSInit(dev_t deviceID);
// base class version must be called on
// success
virtual void VFSUninit();
// base class version must be called
inline bool IsKnownToVFS() const;
void SetID(ino_t id);
void SetParent(Directory* parent);
@ -126,6 +132,16 @@ Node::WriteUnlock()
}
bool
Node::IsKnownToVFS() const
{
return (fFlags & NODE_FLAG_KNOWN_TO_VFS) != 0;
}
// #pragma mark -
struct NodeNameHashDefinition {
typedef const char* KeyType;
typedef Node ValueType;

View File

@ -34,9 +34,14 @@ UnpackingLeafNode::~UnpackingLeafNode()
status_t
UnpackingLeafNode::VFSInit(dev_t deviceID)
{
status_t error = B_OK;
if (PackageLeafNode* packageNode = _ActivePackageNode())
return packageNode->VFSInit(deviceID, fID);
return B_OK;
error = packageNode->VFSInit(deviceID, fID);
if (error == B_OK)
Node::VFSInit(deviceID);
return error;
}
@ -45,6 +50,8 @@ UnpackingLeafNode::VFSUninit()
{
if (PackageLeafNode* packageNode = _ActivePackageNode())
packageNode->VFSUninit();
Node::VFSUninit();
}