From f391c9b0eacd77a8fa58a955050f7b9063e547d4 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Mon, 11 Jul 2011 20:32:09 +0200 Subject: [PATCH] Add UnpackingNode::IsOnlyPackageNode() It returns whether the given package node is the only package node attached to that node. --- .../kernel/file_systems/packagefs/UnpackingDirectory.cpp | 8 ++++++++ .../kernel/file_systems/packagefs/UnpackingDirectory.h | 1 + .../kernel/file_systems/packagefs/UnpackingLeafNode.cpp | 8 ++++++++ .../kernel/file_systems/packagefs/UnpackingLeafNode.h | 1 + src/add-ons/kernel/file_systems/packagefs/UnpackingNode.h | 1 + 5 files changed, 19 insertions(+) diff --git a/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.cpp b/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.cpp index 7c70b523b0..66606aeb04 100644 --- a/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.cpp @@ -132,6 +132,14 @@ UnpackingDirectory::GetPackageNode() } +bool +UnpackingDirectory::IsOnlyPackageNode(PackageNode* node) const +{ + return node == fPackageDirectories.Head() + && node == fPackageDirectories.Tail(); +} + + status_t UnpackingDirectory::OpenAttributeDirectory(AttributeDirectoryCookie*& _cookie) { diff --git a/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.h b/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.h index bb94156e9a..61d73034fc 100644 --- a/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.h +++ b/src/add-ons/kernel/file_systems/packagefs/UnpackingDirectory.h @@ -28,6 +28,7 @@ public: virtual void RemovePackageNode(PackageNode* packageNode); virtual PackageNode* GetPackageNode(); + virtual bool IsOnlyPackageNode(PackageNode* node) const; virtual status_t OpenAttributeDirectory( AttributeDirectoryCookie*& _cookie); diff --git a/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.cpp b/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.cpp index 80ca1b96a3..9d671a389b 100644 --- a/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.cpp @@ -156,6 +156,14 @@ UnpackingLeafNode::GetPackageNode() } +bool +UnpackingLeafNode::IsOnlyPackageNode(PackageNode* node) const +{ + PackageLeafNode* head = fPackageNodes.Head(); + return node == head && fPackageNodes.GetNext(head) == NULL; +} + + status_t UnpackingLeafNode::Read(off_t offset, void* buffer, size_t* bufferSize) { diff --git a/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.h b/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.h index b9ed5de547..e1b8db4340 100644 --- a/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.h +++ b/src/add-ons/kernel/file_systems/packagefs/UnpackingLeafNode.h @@ -31,6 +31,7 @@ public: virtual void RemovePackageNode(PackageNode* packageNode); virtual PackageNode* GetPackageNode(); + virtual bool IsOnlyPackageNode(PackageNode* node) const; virtual status_t Read(off_t offset, void* buffer, size_t* bufferSize); diff --git a/src/add-ons/kernel/file_systems/packagefs/UnpackingNode.h b/src/add-ons/kernel/file_systems/packagefs/UnpackingNode.h index f1edd5fe3d..3ac50316c7 100644 --- a/src/add-ons/kernel/file_systems/packagefs/UnpackingNode.h +++ b/src/add-ons/kernel/file_systems/packagefs/UnpackingNode.h @@ -23,6 +23,7 @@ public: virtual void RemovePackageNode(PackageNode* packageNode) = 0; virtual PackageNode* GetPackageNode() = 0; + virtual bool IsOnlyPackageNode(PackageNode* node) const = 0; };