diff --git a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp index 7c7e35bd93..4528169299 100644 --- a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp @@ -6,6 +6,7 @@ #include "UnpackingDirectory.h" +#include "ClassCache.h" #include "DebugSupport.h" #include "EmptyAttributeDirectoryCookie.h" #include "UnpackingAttributeCookie.h" @@ -16,6 +17,9 @@ // #pragma mark - UnpackingDirectory +CLASS_CACHE(UnpackingDirectory); + + UnpackingDirectory::UnpackingDirectory(ino_t id) : Directory(id) @@ -225,6 +229,20 @@ UnpackingDirectory::IndexCookieForAttribute(const StringKey& name) const // #pragma mark - RootDirectory +void* +RootDirectory::operator new(size_t size) +{ + return malloc(size); +} + + +void +RootDirectory::operator delete(void* object) +{ + free(object); +} + + RootDirectory::RootDirectory(ino_t id, const timespec& modifiedTime) : UnpackingDirectory(id), diff --git a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.h b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.h index 2e93764c36..dfc836807a 100644 --- a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.h +++ b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.h @@ -13,6 +13,9 @@ class UnpackingDirectory : public Directory, public UnpackingNode { public: + static void* operator new(size_t size); + static void operator delete(void* block); + UnpackingDirectory(ino_t id); virtual ~UnpackingDirectory(); @@ -55,6 +58,9 @@ private: class RootDirectory : public UnpackingDirectory { public: + static void* operator new(size_t size); + static void operator delete(void* block); + RootDirectory(ino_t id, const timespec& modifiedTime); diff --git a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp index ab70944fb4..d017a67907 100644 --- a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp @@ -11,11 +11,15 @@ #include #include +#include "ClassCache.h" #include "UnpackingAttributeCookie.h" #include "UnpackingAttributeDirectoryCookie.h" #include "Utils.h" +CLASS_CACHE(UnpackingLeafNode); + + UnpackingLeafNode::UnpackingLeafNode(ino_t id) : Node(id), @@ -212,7 +216,7 @@ UnpackingLeafNode::CloneTransferPackageNodes(ino_t id, UnpackingNode*& _newNode) { ASSERT(fFinalPackageNode == NULL); - UnpackingLeafNode* clone = new(std::nothrow) UnpackingLeafNode(id); + UnpackingLeafNode* clone = new UnpackingLeafNode(id); if (clone == NULL) return B_NO_MEMORY; diff --git a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.h b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.h index e70ad2a371..1b3a2cd77c 100644 --- a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.h +++ b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.h @@ -11,8 +11,11 @@ #include "UnpackingNode.h" -class UnpackingLeafNode : public Node, public UnpackingNode { +class UnpackingLeafNode final : public Node, public UnpackingNode { public: + static void* operator new(size_t size); + static void operator delete(void* block); + UnpackingLeafNode(ino_t id); virtual ~UnpackingLeafNode(); diff --git a/src/add-ons/kernel/file_systems/packagefs/volume/Volume.cpp b/src/add-ons/kernel/file_systems/packagefs/volume/Volume.cpp index d0c614f81e..73cce04030 100644 --- a/src/add-ons/kernel/file_systems/packagefs/volume/Volume.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/volume/Volume.cpp @@ -399,7 +399,7 @@ Volume::Mount(const char* parameterString) // create the root node fRootDirectory - = new(std::nothrow) ::RootDirectory(kRootDirectoryID, st.st_mtim); + = new ::RootDirectory(kRootDirectoryID, st.st_mtim); if (fRootDirectory == NULL) RETURN_ERROR(B_NO_MEMORY); fRootDirectory->Init(NULL, volumeNameString); @@ -1394,9 +1394,9 @@ Volume::_CreateUnpackingNode(mode_t mode, Directory* parent, const String& name, { UnpackingNode* unpackingNode; if (S_ISREG(mode) || S_ISLNK(mode)) - unpackingNode = new(std::nothrow) UnpackingLeafNode(fNextNodeID++); + unpackingNode = new UnpackingLeafNode(fNextNodeID++); else if (S_ISDIR(mode)) - unpackingNode = new(std::nothrow) UnpackingDirectory(fNextNodeID++); + unpackingNode = new UnpackingDirectory(fNextNodeID++); else RETURN_ERROR(B_UNSUPPORTED);