| Index: xfa/fgas/crt/fgas_stream.cpp
|
| diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp
|
| index 18d8e0bfe1b62fb1173e316a9d09cf7bbc65aef2..3ccb6521413470369f34adecfa8a79d18d6951c3 100644
|
| --- a/xfa/fgas/crt/fgas_stream.cpp
|
| +++ b/xfa/fgas/crt/fgas_stream.cpp
|
| @@ -14,6 +14,7 @@
|
| #include <algorithm>
|
| #include <memory>
|
|
|
| +#include "third_party/base/ptr_util.h"
|
| #include "xfa/fgas/crt/fgas_codepage.h"
|
|
|
| namespace {
|
| @@ -100,7 +101,8 @@ class CFGAS_FileReadStreamImp : public IFGAS_StreamImp {
|
| CFGAS_FileReadStreamImp();
|
| ~CFGAS_FileReadStreamImp() override {}
|
|
|
| - bool LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess);
|
| + bool LoadFileRead(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
|
| + uint32_t dwAccess);
|
|
|
| // IFGAS_StreamImp:
|
| int32_t GetLength() const override;
|
| @@ -119,7 +121,7 @@ class CFGAS_FileReadStreamImp : public IFGAS_StreamImp {
|
| bool SetLength(int32_t iLength) override { return false; }
|
|
|
| protected:
|
| - IFX_SeekableReadStream* m_pFileRead;
|
| + CFX_RetainPtr<IFX_SeekableReadStream> m_pFileRead;
|
| int32_t m_iPosition;
|
| int32_t m_iLength;
|
| };
|
| @@ -129,10 +131,9 @@ class CFGAS_BufferReadStreamImp : public IFGAS_StreamImp {
|
| CFGAS_BufferReadStreamImp();
|
| ~CFGAS_BufferReadStreamImp() override;
|
|
|
| - bool LoadBufferRead(IFX_BufferedReadStream* pBufferRead,
|
| + bool LoadBufferRead(const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
|
| int32_t iFileSize,
|
| - uint32_t dwAccess,
|
| - bool bReleaseBufferRead);
|
| + uint32_t dwAccess);
|
|
|
| // IFGAS_StreamImp:
|
| int32_t GetLength() const override;
|
| @@ -151,8 +152,7 @@ class CFGAS_BufferReadStreamImp : public IFGAS_StreamImp {
|
| bool SetLength(int32_t iLength) override { return false; }
|
|
|
| private:
|
| - IFX_BufferedReadStream* m_pBufferRead;
|
| - bool m_bReleaseBufferRead;
|
| + CFX_RetainPtr<IFX_BufferedReadStream> m_pBufferRead;
|
| int32_t m_iPosition;
|
| int32_t m_iBufferSize;
|
| };
|
| @@ -162,7 +162,8 @@ class CFGAS_FileWriteStreamImp : public IFGAS_StreamImp {
|
| CFGAS_FileWriteStreamImp();
|
| ~CFGAS_FileWriteStreamImp() override {}
|
|
|
| - bool LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess);
|
| + bool LoadFileWrite(const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
|
| + uint32_t dwAccess);
|
|
|
| // IFGAS_StreamImp:
|
| int32_t GetLength() const override;
|
| @@ -179,7 +180,7 @@ class CFGAS_FileWriteStreamImp : public IFGAS_StreamImp {
|
| bool SetLength(int32_t iLength) override { return false; }
|
|
|
| protected:
|
| - IFX_SeekableWriteStream* m_pFileWrite;
|
| + CFX_RetainPtr<IFX_SeekableWriteStream> m_pFileWrite;
|
| int32_t m_iPosition;
|
| };
|
|
|
| @@ -198,12 +199,13 @@ class CFGAS_Stream : public IFGAS_Stream {
|
|
|
| bool LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess);
|
| bool LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess);
|
| - bool LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess);
|
| - bool LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess);
|
| - bool LoadBufferRead(IFX_BufferedReadStream* pBufferRead,
|
| + bool LoadFileRead(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
|
| + uint32_t dwAccess);
|
| + bool LoadFileWrite(const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
|
| + uint32_t dwAccess);
|
| + bool LoadBufferRead(const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
|
| int32_t iFileSize,
|
| - uint32_t dwAccess,
|
| - bool bReleaseBufferRead);
|
| + uint32_t dwAccess);
|
|
|
| // IFGAS_Stream
|
| void Release() override;
|
| @@ -277,15 +279,17 @@ class CFGAS_TextStream : public IFGAS_Stream {
|
|
|
| class CFGAS_FileRead : public IFX_SeekableReadStream {
|
| public:
|
| - CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream);
|
| + static CFX_RetainPtr<CFGAS_FileRead> Create(IFGAS_Stream* pStream,
|
| + bool bReleaseStream);
|
| ~CFGAS_FileRead() override;
|
|
|
| // IFX_SeekableReadStream
|
| - void Release() override;
|
| FX_FILESIZE GetSize() override;
|
| bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
|
|
|
| protected:
|
| + CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream);
|
| +
|
| bool m_bReleaseStream;
|
| IFGAS_Stream* m_pStream;
|
| };
|
| @@ -322,8 +326,9 @@ bool FileSetSize(FXSYS_FILE* file, int32_t size) {
|
| } // namespace
|
|
|
| // static
|
| -IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableReadStream* pFileRead,
|
| - uint32_t dwAccess) {
|
| +IFGAS_Stream* IFGAS_Stream::CreateStream(
|
| + const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
|
| + uint32_t dwAccess) {
|
| CFGAS_Stream* pSR = new CFGAS_Stream;
|
| if (!pSR->LoadFileRead(pFileRead, dwAccess)) {
|
| pSR->Release();
|
| @@ -336,8 +341,9 @@ IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableReadStream* pFileRead,
|
| }
|
|
|
| // static
|
| -IFGAS_Stream* IFGAS_Stream::CreateStream(IFX_SeekableWriteStream* pFileWrite,
|
| - uint32_t dwAccess) {
|
| +IFGAS_Stream* IFGAS_Stream::CreateStream(
|
| + const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
|
| + uint32_t dwAccess) {
|
| CFGAS_Stream* pSR = new CFGAS_Stream;
|
| if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) {
|
| pSR->Release();
|
| @@ -534,18 +540,22 @@ bool CFGAS_FileStreamImp::SetLength(int32_t iLength) {
|
| m_iLength = FileLength(m_hFile);
|
| return bRet;
|
| }
|
| +
|
| CFGAS_FileReadStreamImp::CFGAS_FileReadStreamImp()
|
| : m_pFileRead(nullptr), m_iPosition(0), m_iLength(0) {}
|
| -bool CFGAS_FileReadStreamImp::LoadFileRead(IFX_SeekableReadStream* pFileRead,
|
| - uint32_t dwAccess) {
|
| +
|
| +bool CFGAS_FileReadStreamImp::LoadFileRead(
|
| + const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
|
| + uint32_t dwAccess) {
|
| ASSERT(!m_pFileRead && pFileRead);
|
| - if (dwAccess & FX_STREAMACCESS_Write) {
|
| + if (dwAccess & FX_STREAMACCESS_Write)
|
| return false;
|
| - }
|
| +
|
| m_pFileRead = pFileRead;
|
| m_iLength = m_pFileRead->GetSize();
|
| return true;
|
| }
|
| +
|
| int32_t CFGAS_FileReadStreamImp::GetLength() const {
|
| return m_iLength;
|
| }
|
| @@ -600,34 +610,28 @@ int32_t CFGAS_FileReadStreamImp::ReadString(FX_WCHAR* pStr,
|
| bEOS = (m_iPosition >= m_iLength) || pStr[i] == L'\0';
|
| return i;
|
| }
|
| +
|
| CFGAS_BufferReadStreamImp::CFGAS_BufferReadStreamImp()
|
| - : m_pBufferRead(nullptr),
|
| - m_bReleaseBufferRead(false),
|
| - m_iPosition(0),
|
| - m_iBufferSize(0) {}
|
| -CFGAS_BufferReadStreamImp::~CFGAS_BufferReadStreamImp() {
|
| - if (m_bReleaseBufferRead && m_pBufferRead) {
|
| - m_pBufferRead->Release();
|
| - }
|
| -}
|
| + : m_iPosition(0), m_iBufferSize(0) {}
|
| +
|
| +CFGAS_BufferReadStreamImp::~CFGAS_BufferReadStreamImp() {}
|
| +
|
| bool CFGAS_BufferReadStreamImp::LoadBufferRead(
|
| - IFX_BufferedReadStream* pBufferRead,
|
| + const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
|
| int32_t iFileSize,
|
| - uint32_t dwAccess,
|
| - bool bReleaseBufferRead) {
|
| + uint32_t dwAccess) {
|
| ASSERT(!m_pBufferRead && pBufferRead);
|
| - if (dwAccess & FX_STREAMACCESS_Write) {
|
| + if (dwAccess & FX_STREAMACCESS_Write)
|
| return false;
|
| - }
|
| - m_bReleaseBufferRead = bReleaseBufferRead;
|
| +
|
| m_pBufferRead = pBufferRead;
|
| m_iBufferSize = iFileSize;
|
| - if (m_iBufferSize >= 0) {
|
| + if (m_iBufferSize >= 0)
|
| return true;
|
| - }
|
| - if (!m_pBufferRead->ReadNextBlock(true)) {
|
| +
|
| + if (!m_pBufferRead->ReadNextBlock(true))
|
| return false;
|
| - }
|
| +
|
| m_iBufferSize = m_pBufferRead->GetBlockSize();
|
| while (!m_pBufferRead->IsEOF()) {
|
| m_pBufferRead->ReadNextBlock(false);
|
| @@ -733,23 +737,25 @@ int32_t CFGAS_BufferReadStreamImp::ReadString(FX_WCHAR* pStr,
|
| }
|
| CFGAS_FileWriteStreamImp::CFGAS_FileWriteStreamImp()
|
| : m_pFileWrite(nullptr), m_iPosition(0) {}
|
| +
|
| bool CFGAS_FileWriteStreamImp::LoadFileWrite(
|
| - IFX_SeekableWriteStream* pFileWrite,
|
| + const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
|
| uint32_t dwAccess) {
|
| ASSERT(!m_pFileWrite && pFileWrite);
|
| - if (dwAccess & FX_STREAMACCESS_Read) {
|
| + if (dwAccess & FX_STREAMACCESS_Read)
|
| return false;
|
| - }
|
| - if (dwAccess & FX_STREAMACCESS_Append) {
|
| +
|
| + if (dwAccess & FX_STREAMACCESS_Append)
|
| m_iPosition = pFileWrite->GetSize();
|
| - }
|
| +
|
| m_pFileWrite = pFileWrite;
|
| return true;
|
| }
|
| +
|
| int32_t CFGAS_FileWriteStreamImp::GetLength() const {
|
| - if (!m_pFileWrite) {
|
| + if (!m_pFileWrite)
|
| return 0;
|
| - }
|
| +
|
| return (int32_t)m_pFileWrite->GetSize();
|
| }
|
| int32_t CFGAS_FileWriteStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) {
|
| @@ -1159,8 +1165,9 @@ bool CFGAS_Stream::LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess) {
|
| return true;
|
| }
|
|
|
| -bool CFGAS_Stream::LoadFileRead(IFX_SeekableReadStream* pFileRead,
|
| - uint32_t dwAccess) {
|
| +bool CFGAS_Stream::LoadFileRead(
|
| + const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
|
| + uint32_t dwAccess) {
|
| if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
|
| return false;
|
|
|
| @@ -1178,16 +1185,16 @@ bool CFGAS_Stream::LoadFileRead(IFX_SeekableReadStream* pFileRead,
|
| return true;
|
| }
|
|
|
| -bool CFGAS_Stream::LoadFileWrite(IFX_SeekableWriteStream* pFileWrite,
|
| - uint32_t dwAccess) {
|
| +bool CFGAS_Stream::LoadFileWrite(
|
| + const CFX_RetainPtr<IFX_SeekableWriteStream>& pFileWrite,
|
| + uint32_t dwAccess) {
|
| if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
|
| return false;
|
|
|
| if (!pFileWrite)
|
| return false;
|
|
|
| - std::unique_ptr<CFGAS_FileWriteStreamImp> pImp(
|
| - new CFGAS_FileWriteStreamImp());
|
| + auto pImp = pdfium::MakeUnique<CFGAS_FileWriteStreamImp>();
|
| if (!pImp->LoadFileWrite(pFileWrite, dwAccess))
|
| return false;
|
|
|
| @@ -1218,20 +1225,18 @@ bool CFGAS_Stream::LoadBuffer(uint8_t* pData,
|
| return true;
|
| }
|
|
|
| -bool CFGAS_Stream::LoadBufferRead(IFX_BufferedReadStream* pBufferRead,
|
| - int32_t iFileSize,
|
| - uint32_t dwAccess,
|
| - bool bReleaseBufferRead) {
|
| +bool CFGAS_Stream::LoadBufferRead(
|
| + const CFX_RetainPtr<IFX_BufferedReadStream>& pBufferRead,
|
| + int32_t iFileSize,
|
| + uint32_t dwAccess) {
|
| if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
|
| return false;
|
|
|
| if (!pBufferRead)
|
| return false;
|
|
|
| - std::unique_ptr<CFGAS_BufferReadStreamImp> pImp(
|
| - new CFGAS_BufferReadStreamImp);
|
| - if (!pImp->LoadBufferRead(pBufferRead, iFileSize, dwAccess,
|
| - bReleaseBufferRead))
|
| + auto pImp = pdfium::MakeUnique<CFGAS_BufferReadStreamImp>();
|
| + if (!pImp->LoadBufferRead(pBufferRead, iFileSize, dwAccess))
|
| return false;
|
|
|
| m_pStreamImp = pImp.release();
|
| @@ -1478,14 +1483,21 @@ IFGAS_Stream* CFGAS_Stream::CreateSharedStream(uint32_t dwAccess,
|
| return pShared;
|
| }
|
|
|
| -IFX_SeekableReadStream* IFGAS_Stream::MakeSeekableReadStream() {
|
| - return new CFGAS_FileRead(this, false);
|
| +CFX_RetainPtr<IFX_SeekableReadStream> IFGAS_Stream::MakeSeekableReadStream() {
|
| + return CFGAS_FileRead::Create(this, false);
|
| +}
|
| +
|
| +CFX_RetainPtr<CFGAS_FileRead> CFGAS_FileRead::Create(IFGAS_Stream* pStream,
|
| + bool bReleaseStream) {
|
| + return CFX_RetainPtr<CFGAS_FileRead>(
|
| + new CFGAS_FileRead(pStream, bReleaseStream));
|
| }
|
|
|
| CFGAS_FileRead::CFGAS_FileRead(IFGAS_Stream* pStream, bool bReleaseStream)
|
| : m_bReleaseStream(bReleaseStream), m_pStream(pStream) {
|
| ASSERT(m_pStream);
|
| }
|
| +
|
| CFGAS_FileRead::~CFGAS_FileRead() {
|
| if (m_bReleaseStream) {
|
| m_pStream->Release();
|
| @@ -1500,7 +1512,3 @@ bool CFGAS_FileRead::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) {
|
| int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size);
|
| return iLen == (int32_t)size;
|
| }
|
| -
|
| -void CFGAS_FileRead::Release() {
|
| - delete this;
|
| -}
|
|
|