diff options
author | Johannes Schickel | 2016-01-07 11:14:00 +0100 |
---|---|---|
committer | Johannes Schickel | 2016-01-07 11:25:02 +0100 |
commit | 54f5c95832921b72583144e53fa45318a60e9ff9 (patch) | |
tree | cfe4f30a481bba1b6cdf6c15ede4da98eea44359 | |
parent | 1baf3bed7ab240f2ca0f5696b1e78dc741222ae2 (diff) | |
download | scummvm-rg350-54f5c95832921b72583144e53fa45318a60e9ff9.tar.gz scummvm-rg350-54f5c95832921b72583144e53fa45318a60e9ff9.tar.bz2 scummvm-rg350-54f5c95832921b72583144e53fa45318a60e9ff9.zip |
COMMON: Make FSNode(AbstractFSNode *) private again.
This also fixes a memory leak in OSystem_iOS7::addSysArchivesToSearchSet.
-rw-r--r-- | backends/fs/abstract-fs.h | 14 | ||||
-rw-r--r-- | backends/platform/ios7/ios7_osys_main.cpp | 3 | ||||
-rw-r--r-- | common/fs.h | 11 |
3 files changed, 23 insertions, 5 deletions
diff --git a/backends/fs/abstract-fs.h b/backends/fs/abstract-fs.h index 34a8120caa..dcfdc08975 100644 --- a/backends/fs/abstract-fs.h +++ b/backends/fs/abstract-fs.h @@ -84,6 +84,20 @@ protected: public: /** + * Construct a FSNode object from an AbstractFSNode object. + * + * This is a helper to create Common::FSNode objects when the backend's + * FileSystemFactory cannot create the given AbstractFSNode object itself. + * All other code is supposed to use Common::FSNode's constructor itself. + * + * @param realNode Pointer to a heap allocated instance. FSNode will take + * ownership of the pointer. + */ + static Common::FSNode makeFSNode(AbstractFSNode *realNode) { + return Common::FSNode(realNode); + } + + /** * Destructor. */ virtual ~AbstractFSNode() {} diff --git a/backends/platform/ios7/ios7_osys_main.cpp b/backends/platform/ios7/ios7_osys_main.cpp index 37fa34ce33..f169dbb1b2 100644 --- a/backends/platform/ios7/ios7_osys_main.cpp +++ b/backends/platform/ios7/ios7_osys_main.cpp @@ -301,8 +301,7 @@ void OSystem_iOS7::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) Common::String bundlePath((const char *)buf); #ifdef IPHONE_SANDBOXED POSIXFilesystemNode *posixNode = new POSIXFilesystemNode(bundlePath); - Common::FSNode *node = new Common::FSNode(posixNode); - s.add("__IOS_BUNDLE__", new Common::FSDirectory(*node), priority); + s.add("__IOS_BUNDLE__", new Common::FSDirectory(AbstractFSNode::makeFSNode(posixNode)), priority); #else s.add("__IOS_BUNDLE__", new Common::FSDirectory(bundlePath), priority); #endif diff --git a/common/fs.h b/common/fs.h index 66e98444d6..f516bf7a9c 100644 --- a/common/fs.h +++ b/common/fs.h @@ -57,12 +57,17 @@ class FSList : public Array<FSNode> {}; */ class FSNode : public ArchiveMember { private: + friend class ::AbstractFSNode; SharedPtr<AbstractFSNode> _realNode; - -public: - // WARNING: Use this constructor with care! FSNode takes the ownership of the pointer and will delete it at some point. + /** + * Construct a FSNode from a backend's AbstractFSNode implementation. + * + * @param realNode Pointer to a heap allocated instance. FSNode will take + * ownership of the pointer. + */ FSNode(AbstractFSNode *realNode); +public: /** * Flag to tell listDir() which kind of files to list. */ |