diff options
author | tsepez <tsepez@chromium.org> | 2016-12-07 15:28:14 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-12-07 15:28:14 -0800 |
commit | a9d29df6a774737a661d0f37f6b8aa5cba179c06 (patch) | |
tree | 0bd11a3575f9459163247de93db3fa375a44e98a /core | |
parent | cd5e12a9ea397b48056643a7b65126395eec3174 (diff) | |
download | pdfium-a9d29df6a774737a661d0f37f6b8aa5cba179c06.tar.xz |
Properly ref count IFX_FileAccess.
Review-Url: https://codereview.chromium.org/2562563002
Diffstat (limited to 'core')
-rw-r--r-- | core/fxcrt/fx_extension.cpp | 28 | ||||
-rw-r--r-- | core/fxcrt/fx_stream.h | 8 |
2 files changed, 12 insertions, 24 deletions
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp index 630d4da2aa..ba82b9b7f0 100644 --- a/core/fxcrt/fx_extension.cpp +++ b/core/fxcrt/fx_extension.cpp @@ -25,36 +25,26 @@ namespace { class CFX_CRTFileAccess : public IFX_FileAccess { public: - CFX_CRTFileAccess(); - ~CFX_CRTFileAccess() override; + template <typename T, typename... Args> + friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args); // IFX_FileAccess - void Release() override; - IFX_FileAccess* Retain() override; void GetPath(CFX_WideString& wsPath) override; CFX_RetainPtr<IFX_SeekableStream> CreateFileStream(uint32_t dwModes) override; bool Init(const CFX_WideStringC& wsPath); private: + CFX_CRTFileAccess(); + ~CFX_CRTFileAccess() override; + CFX_WideString m_path; - uint32_t m_RefCount; }; -CFX_CRTFileAccess::CFX_CRTFileAccess() : m_RefCount(0) {} +CFX_CRTFileAccess::CFX_CRTFileAccess() {} CFX_CRTFileAccess::~CFX_CRTFileAccess() {} -void CFX_CRTFileAccess::Release() { - if (--m_RefCount == 0) - delete this; -} - -IFX_FileAccess* CFX_CRTFileAccess::Retain() { - m_RefCount++; - return (IFX_FileAccess*)this; -} - void CFX_CRTFileAccess::GetPath(CFX_WideString& wsPath) { wsPath = m_path; } @@ -66,7 +56,6 @@ CFX_RetainPtr<IFX_SeekableStream> CFX_CRTFileAccess::CreateFileStream( bool CFX_CRTFileAccess::Init(const CFX_WideStringC& wsPath) { m_path = wsPath; - m_RefCount = 1; return true; } @@ -385,11 +374,12 @@ bool CFX_MemoryStream::ExpandBlocks(size_t size) { } // namespace #ifdef PDF_ENABLE_XFA -IFX_FileAccess* IFX_FileAccess::CreateDefault(const CFX_WideStringC& wsPath) { +CFX_RetainPtr<IFX_FileAccess> IFX_FileAccess::CreateDefault( + const CFX_WideStringC& wsPath) { if (wsPath.GetLength() == 0) return nullptr; - CFX_CRTFileAccess* pFA = new CFX_CRTFileAccess; + auto pFA = pdfium::MakeRetain<CFX_CRTFileAccess>(); pFA->Init(wsPath); return pFA; } diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h index b998761742..2f4b5ad280 100644 --- a/core/fxcrt/fx_stream.h +++ b/core/fxcrt/fx_stream.h @@ -143,13 +143,11 @@ class IFX_BufferedReadStream : public IFX_ReadStream { }; #ifdef PDF_ENABLE_XFA -class IFX_FileAccess { +class IFX_FileAccess : public CFX_Retainable { public: - static IFX_FileAccess* CreateDefault(const CFX_WideStringC& wsPath); + static CFX_RetainPtr<IFX_FileAccess> CreateDefault( + const CFX_WideStringC& wsPath); - virtual ~IFX_FileAccess() {} - virtual void Release() = 0; - virtual IFX_FileAccess* Retain() = 0; virtual void GetPath(CFX_WideString& wsPath) = 0; virtual CFX_RetainPtr<IFX_SeekableStream> CreateFileStream( uint32_t dwModes) = 0; |