| Index: xfa/fgas/crt/fgas_stream.cpp
|
| diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp
|
| index 74c19eab32f614f67128dff070d8577a0ae925ab..155a63a921395860691f7c010ed7d9c426a4d90b 100644
|
| --- a/xfa/fgas/crt/fgas_stream.cpp
|
| +++ b/xfa/fgas/crt/fgas_stream.cpp
|
| @@ -296,12 +296,14 @@ class CFGAS_FileRead : public IFX_FileRead {
|
|
|
| // IFX_FileRead
|
| void Release() override;
|
| + FX_BOOL IsEOF() override;
|
| FX_FILESIZE GetSize() override;
|
| - FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
|
| + size_t ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
|
|
|
| protected:
|
| FX_BOOL m_bReleaseStream;
|
| IFX_Stream* m_pStream;
|
| + FX_FILESIZE m_nCurPos;
|
| };
|
|
|
| int32_t FileLength(FXSYS_FILE* file) {
|
| @@ -590,7 +592,9 @@ int32_t CFX_FileReadStreamImp::ReadData(uint8_t* pBuffer, int32_t iBufferSize) {
|
| if (iBufferSize > m_iLength - m_iPosition) {
|
| iBufferSize = m_iLength - m_iPosition;
|
| }
|
| - if (m_pFileRead->ReadBlock(pBuffer, m_iPosition, iBufferSize)) {
|
| + if (m_pFileRead->ReadBlock(pBuffer, m_iPosition, iBufferSize) ==
|
| + iBufferSize ||
|
| + m_pFileRead->IsEOF()) {
|
| m_iPosition += iBufferSize;
|
| return iBufferSize;
|
| }
|
| @@ -1473,7 +1477,7 @@ IFX_FileRead* FX_CreateFileRead(IFX_Stream* pBaseStream,
|
| return new CFGAS_FileRead(pBaseStream, bReleaseStream);
|
| }
|
| CFGAS_FileRead::CFGAS_FileRead(IFX_Stream* pStream, FX_BOOL bReleaseStream)
|
| - : m_bReleaseStream(bReleaseStream), m_pStream(pStream) {
|
| + : m_bReleaseStream(bReleaseStream), m_pStream(pStream), m_nCurPos(0) {
|
| ASSERT(m_pStream);
|
| }
|
| CFGAS_FileRead::~CFGAS_FileRead() {
|
| @@ -1481,15 +1485,19 @@ CFGAS_FileRead::~CFGAS_FileRead() {
|
| m_pStream->Release();
|
| }
|
| }
|
| +FX_BOOL CFGAS_FileRead::IsEOF() {
|
| + return m_nCurPos >= (FX_FILESIZE)m_pStream->GetLength();
|
| +}
|
| FX_FILESIZE CFGAS_FileRead::GetSize() {
|
| return (FX_FILESIZE)m_pStream->GetLength();
|
| }
|
| -FX_BOOL CFGAS_FileRead::ReadBlock(void* buffer,
|
| - FX_FILESIZE offset,
|
| - size_t size) {
|
| +size_t CFGAS_FileRead::ReadBlock(void* buffer,
|
| + FX_FILESIZE offset,
|
| + size_t size) {
|
| m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset);
|
| int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size);
|
| - return iLen == (int32_t)size;
|
| + m_nCurPos = offset + iLen;
|
| + return iLen;
|
| }
|
|
|
| void CFGAS_FileRead::Release() {
|
|
|