Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: xfa/fgas/crt/fgas_stream.cpp

Issue 1992033002: fgas/ code cleanup. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fgas/crt/fgas_stream.h" 7 #include "xfa/fgas/crt/fgas_stream.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 virtual ~CFGAS_FileRead(); 267 virtual ~CFGAS_FileRead();
268 virtual void Release() { delete this; } 268 virtual void Release() { delete this; }
269 virtual FX_FILESIZE GetSize(); 269 virtual FX_FILESIZE GetSize();
270 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); 270 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size);
271 271
272 protected: 272 protected:
273 FX_BOOL m_bReleaseStream; 273 FX_BOOL m_bReleaseStream;
274 IFX_Stream* m_pStream; 274 IFX_Stream* m_pStream;
275 }; 275 };
276 276
277 class CFX_BufferAccImp : public IFX_FileRead { 277 int32_t filelength(FXSYS_FILE* file) {
Tom Sepez 2016/05/18 22:01:21 Our naming would have functions starting with a ca
dsinclair 2016/05/19 14:24:44 Done.
278 public: 278 ASSERT(file != NULL);
279 CFX_BufferAccImp(IFX_BufferRead* pBufferRead, 279 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_
280 FX_FILESIZE iFileSize, 280 return _filelength(_fileno(file));
281 FX_BOOL bReleaseStream); 281 #else
282 virtual ~CFX_BufferAccImp(); 282 int32_t iPos = FXSYS_ftell(file);
283 virtual void Release() { delete this; } 283 FXSYS_fseek(file, 0, FXSYS_SEEK_END);
284 virtual FX_FILESIZE GetSize(); 284 int32_t iLen = FXSYS_ftell(file);
285 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); 285 FXSYS_fseek(file, iPos, FXSYS_SEEK_SET);
286 return iLen;
287 #endif
288 }
286 289
287 protected: 290 FX_BOOL fsetsize(FXSYS_FILE* file, int32_t size) {
Tom Sepez 2016/05/18 22:01:21 maybe FileSetSize()
dsinclair 2016/05/19 14:24:44 Done.
288 IFX_BufferRead* m_pBufferRead; 291 ASSERT(file != NULL);
289 FX_BOOL m_bReleaseStream; 292 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_
290 FX_FILESIZE m_iBufSize; 293 return _chsize(_fileno(file), size) == 0;
291 }; 294 #elif _FX_OS_ == _FX_WIN32_MOBILE_
292 295 HANDLE hFile = _fileno(file);
293 class CFGAS_FileWrite : public IFX_FileWrite { 296 uint32_t dwPos = ::SetFilePointer(hFile, 0, 0, FILE_CURRENT);
294 public: 297 ::SetFilePointer(hFile, size, 0, FILE_BEGIN);
295 CFGAS_FileWrite(IFX_Stream* pStream, FX_BOOL bReleaseStream); 298 FX_BOOL bRet = ::SetEndOfFile(hFile);
296 virtual ~CFGAS_FileWrite(); 299 ::SetFilePointer(hFile, (int32_t)dwPos, 0, FILE_BEGIN);
297 virtual void Release() { delete this; } 300 return bRet;
298 virtual FX_FILESIZE GetSize(); 301 #else
299 virtual FX_BOOL Flush(); 302 return FALSE;
300 virtual FX_BOOL WriteBlock(const void* pData, size_t size); 303 #endif
301 virtual FX_BOOL WriteBlock(const void* pData, 304 }
302 FX_FILESIZE offset,
303 size_t size);
304
305 protected:
306 IFX_Stream* m_pStream;
307 FX_BOOL m_bReleaseStream;
308 };
309 305
310 } // namespace 306 } // namespace
311 307
312 IFX_Stream* IFX_Stream::CreateStream(IFX_BufferRead* pBufferRead, 308 IFX_Stream* IFX_Stream::CreateStream(IFX_BufferRead* pBufferRead,
313 uint32_t dwAccess, 309 uint32_t dwAccess,
314 int32_t iFileSize, 310 int32_t iFileSize,
315 FX_BOOL bReleaseBufferRead) { 311 FX_BOOL bReleaseBufferRead) {
316 CFX_Stream* pSR = new CFX_Stream; 312 CFX_Stream* pSR = new CFX_Stream;
317 if (!pSR->LoadBufferRead(pBufferRead, iFileSize, dwAccess, 313 if (!pSR->LoadBufferRead(pBufferRead, iFileSize, dwAccess,
318 bReleaseBufferRead)) { 314 bReleaseBufferRead)) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 if (dwAccess & FX_STREAMACCESS_Write) { 402 if (dwAccess & FX_STREAMACCESS_Write) {
407 if (dwAccess & FX_STREAMACCESS_Create) 403 if (dwAccess & FX_STREAMACCESS_Create)
408 m_hFile = FXSYS_wfopen(pszSrcFileName, L"w+b"); 404 m_hFile = FXSYS_wfopen(pszSrcFileName, L"w+b");
409 405
410 if (!m_hFile) { 406 if (!m_hFile) {
411 m_hFile = FXSYS_wfopen(pszSrcFileName, L"r+b"); 407 m_hFile = FXSYS_wfopen(pszSrcFileName, L"r+b");
412 if (!m_hFile) 408 if (!m_hFile)
413 return FALSE; 409 return FALSE;
414 410
415 if (dwAccess & FX_STREAMACCESS_Truncate) 411 if (dwAccess & FX_STREAMACCESS_Truncate)
416 FX_fsetsize(m_hFile, 0); 412 fsetsize(m_hFile, 0);
417 } 413 }
418 } else { 414 } else {
419 return FALSE; 415 return FALSE;
420 } 416 }
421 } 417 }
422 #else 418 #else
423 const FX_CHAR* wsMode = "rb"; 419 const FX_CHAR* wsMode = "rb";
424 if (dwAccess & FX_STREAMACCESS_Write) { 420 if (dwAccess & FX_STREAMACCESS_Write) {
425 if (dwAccess & FX_STREAMACCESS_Append) { 421 if (dwAccess & FX_STREAMACCESS_Append) {
426 wsMode = "a+b"; 422 wsMode = "a+b";
427 } else if (dwAccess & FX_STREAMACCESS_Truncate) { 423 } else if (dwAccess & FX_STREAMACCESS_Truncate) {
428 wsMode = "w+b"; 424 wsMode = "w+b";
429 } else { 425 } else {
430 wsMode = "r+b"; 426 wsMode = "r+b";
431 } 427 }
432 } 428 }
433 CFX_ByteString szFileName = CFX_ByteString::FromUnicode(pszSrcFileName); 429 CFX_ByteString szFileName = CFX_ByteString::FromUnicode(pszSrcFileName);
434 m_hFile = FXSYS_fopen(szFileName.c_str(), wsMode); 430 m_hFile = FXSYS_fopen(szFileName.c_str(), wsMode);
435 if (m_hFile == NULL) { 431 if (m_hFile == NULL) {
436 if (dwAccess & FX_STREAMACCESS_Write) { 432 if (dwAccess & FX_STREAMACCESS_Write) {
437 if (dwAccess & FX_STREAMACCESS_Create) { 433 if (dwAccess & FX_STREAMACCESS_Create) {
438 m_hFile = FXSYS_fopen(szFileName.c_str(), "w+b"); 434 m_hFile = FXSYS_fopen(szFileName.c_str(), "w+b");
439 } 435 }
440 if (m_hFile == NULL) { 436 if (m_hFile == NULL) {
441 m_hFile = FXSYS_fopen(szFileName.c_str(), "r+b"); 437 m_hFile = FXSYS_fopen(szFileName.c_str(), "r+b");
442 if (m_hFile == NULL) { 438 if (m_hFile == NULL) {
443 return FALSE; 439 return FALSE;
444 } 440 }
445 if (dwAccess & FX_STREAMACCESS_Truncate) { 441 if (dwAccess & FX_STREAMACCESS_Truncate) {
446 FX_fsetsize(m_hFile, 0); 442 fsetsize(m_hFile, 0);
447 } 443 }
448 } 444 }
449 } else { 445 } else {
450 return FALSE; 446 return FALSE;
451 } 447 }
452 } 448 }
453 #endif 449 #endif
454 m_dwAccess = dwAccess; 450 m_dwAccess = dwAccess;
455 if ((dwAccess & (FX_STREAMACCESS_Write | FX_STREAMACCESS_Truncate)) == 451 if ((dwAccess & (FX_STREAMACCESS_Write | FX_STREAMACCESS_Truncate)) ==
456 (FX_STREAMACCESS_Write | FX_STREAMACCESS_Truncate)) { 452 (FX_STREAMACCESS_Write | FX_STREAMACCESS_Truncate)) {
457 m_iLength = 0; 453 m_iLength = 0;
458 } else { 454 } else {
459 m_iLength = FX_filelength(m_hFile); 455 m_iLength = filelength(m_hFile);
460 } 456 }
461 return TRUE; 457 return TRUE;
462 } 458 }
463 int32_t CFX_FileStreamImp::GetLength() const { 459 int32_t CFX_FileStreamImp::GetLength() const {
464 ASSERT(m_hFile != NULL); 460 ASSERT(m_hFile != NULL);
465 return m_iLength; 461 return m_iLength;
466 } 462 }
467 int32_t CFX_FileStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { 463 int32_t CFX_FileStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) {
468 ASSERT(m_hFile != NULL); 464 ASSERT(m_hFile != NULL);
469 FXSYS_fseek(m_hFile, iOffset, eSeek); 465 FXSYS_fseek(m_hFile, iOffset, eSeek);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 } 527 }
532 } 528 }
533 return iRet; 529 return iRet;
534 } 530 }
535 void CFX_FileStreamImp::Flush() { 531 void CFX_FileStreamImp::Flush() {
536 ASSERT(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); 532 ASSERT(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0);
537 FXSYS_fflush(m_hFile); 533 FXSYS_fflush(m_hFile);
538 } 534 }
539 FX_BOOL CFX_FileStreamImp::SetLength(int32_t iLength) { 535 FX_BOOL CFX_FileStreamImp::SetLength(int32_t iLength) {
540 ASSERT(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); 536 ASSERT(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0);
541 FX_BOOL bRet = FX_fsetsize(m_hFile, iLength); 537 FX_BOOL bRet = fsetsize(m_hFile, iLength);
542 m_iLength = FX_filelength(m_hFile); 538 m_iLength = filelength(m_hFile);
543 return bRet; 539 return bRet;
544 } 540 }
545 CFX_FileReadStreamImp::CFX_FileReadStreamImp() 541 CFX_FileReadStreamImp::CFX_FileReadStreamImp()
546 : m_pFileRead(NULL), m_iPosition(0), m_iLength(0) {} 542 : m_pFileRead(NULL), m_iPosition(0), m_iLength(0) {}
547 FX_BOOL CFX_FileReadStreamImp::LoadFileRead(IFX_FileRead* pFileRead, 543 FX_BOOL CFX_FileReadStreamImp::LoadFileRead(IFX_FileRead* pFileRead,
548 uint32_t dwAccess) { 544 uint32_t dwAccess) {
549 ASSERT(m_pFileRead == NULL && pFileRead != NULL); 545 ASSERT(m_pFileRead == NULL && pFileRead != NULL);
550 if (dwAccess & FX_STREAMACCESS_Write) { 546 if (dwAccess & FX_STREAMACCESS_Write) {
551 return FALSE; 547 return FALSE;
552 } 548 }
(...skipping 936 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 FX_FILESIZE CFGAS_FileRead::GetSize() { 1485 FX_FILESIZE CFGAS_FileRead::GetSize() {
1490 return (FX_FILESIZE)m_pStream->GetLength(); 1486 return (FX_FILESIZE)m_pStream->GetLength();
1491 } 1487 }
1492 FX_BOOL CFGAS_FileRead::ReadBlock(void* buffer, 1488 FX_BOOL CFGAS_FileRead::ReadBlock(void* buffer,
1493 FX_FILESIZE offset, 1489 FX_FILESIZE offset,
1494 size_t size) { 1490 size_t size) {
1495 m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset); 1491 m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset);
1496 int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size); 1492 int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size);
1497 return iLen == (int32_t)size; 1493 return iLen == (int32_t)size;
1498 } 1494 }
1499
1500 IFX_FileRead* FX_CreateFileRead(IFX_BufferRead* pBufferRead,
1501 FX_FILESIZE iFileSize,
1502 FX_BOOL bReleaseStream) {
1503 if (!pBufferRead) {
1504 return NULL;
1505 }
1506 return new CFX_BufferAccImp(pBufferRead, iFileSize, bReleaseStream);
1507 }
1508 CFX_BufferAccImp::CFX_BufferAccImp(IFX_BufferRead* pBufferRead,
1509 FX_FILESIZE iFileSize,
1510 FX_BOOL bReleaseStream)
1511 : m_pBufferRead(pBufferRead),
1512 m_bReleaseStream(bReleaseStream),
1513 m_iBufSize(iFileSize) {
1514 ASSERT(m_pBufferRead);
1515 }
1516 CFX_BufferAccImp::~CFX_BufferAccImp() {
1517 if (m_bReleaseStream && m_pBufferRead) {
1518 m_pBufferRead->Release();
1519 }
1520 }
1521 FX_FILESIZE CFX_BufferAccImp::GetSize() {
1522 if (!m_pBufferRead) {
1523 return 0;
1524 }
1525 if (m_iBufSize >= 0) {
1526 return m_iBufSize;
1527 }
1528 if (!m_pBufferRead->ReadNextBlock(TRUE)) {
1529 return 0;
1530 }
1531 m_iBufSize = (FX_FILESIZE)m_pBufferRead->GetBlockSize();
1532 while (!m_pBufferRead->IsEOF()) {
1533 m_pBufferRead->ReadNextBlock(FALSE);
1534 m_iBufSize += (FX_FILESIZE)m_pBufferRead->GetBlockSize();
1535 }
1536 return m_iBufSize;
1537 }
1538 FX_BOOL CFX_BufferAccImp::ReadBlock(void* buffer,
1539 FX_FILESIZE offset,
1540 size_t size) {
1541 if (!m_pBufferRead) {
1542 return FALSE;
1543 }
1544 if (!buffer || !size) {
1545 return TRUE;
1546 }
1547 FX_FILESIZE dwBufSize = GetSize();
1548 if (offset >= dwBufSize) {
1549 return FALSE;
1550 }
1551 size_t dwBlockSize = m_pBufferRead->GetBlockSize();
1552 FX_FILESIZE dwBlockOffset = m_pBufferRead->GetBlockOffset();
1553 if (offset < dwBlockOffset) {
1554 if (!m_pBufferRead->ReadNextBlock(TRUE)) {
1555 return FALSE;
1556 }
1557 dwBlockSize = m_pBufferRead->GetBlockSize();
1558 dwBlockOffset = m_pBufferRead->GetBlockOffset();
1559 }
1560 while (offset < dwBlockOffset ||
1561 offset >= (FX_FILESIZE)(dwBlockOffset + dwBlockSize)) {
1562 if (m_pBufferRead->IsEOF() || !m_pBufferRead->ReadNextBlock(FALSE)) {
1563 break;
1564 }
1565 dwBlockSize = m_pBufferRead->GetBlockSize();
1566 dwBlockOffset = m_pBufferRead->GetBlockOffset();
1567 }
1568 if (offset < dwBlockOffset ||
1569 offset >= (FX_FILESIZE)(dwBlockOffset + dwBlockSize)) {
1570 return FALSE;
1571 }
1572 const uint8_t* pBuffer = m_pBufferRead->GetBlockBuffer();
1573 const FX_FILESIZE dwOffset = offset - dwBlockOffset;
1574 size_t dwCopySize =
1575 std::min(size, static_cast<size_t>(dwBlockSize - dwOffset));
1576 FXSYS_memcpy(buffer, pBuffer + dwOffset, dwCopySize);
1577 offset = dwCopySize;
1578 size -= dwCopySize;
1579 while (size) {
1580 if (!m_pBufferRead->ReadNextBlock(FALSE)) {
1581 break;
1582 }
1583 dwBlockOffset = m_pBufferRead->GetBlockOffset();
1584 dwBlockSize = m_pBufferRead->GetBlockSize();
1585 pBuffer = m_pBufferRead->GetBlockBuffer();
1586 dwCopySize = std::min(size, dwBlockSize);
1587 FXSYS_memcpy(((uint8_t*)buffer) + offset, pBuffer, dwCopySize);
1588 offset += dwCopySize;
1589 size -= dwCopySize;
1590 }
1591 return TRUE;
1592 }
1593
1594 IFX_FileWrite* FX_CreateFileWrite(IFX_Stream* pBaseStream,
1595 FX_BOOL bReleaseStream) {
1596 ASSERT(pBaseStream != NULL);
1597 return new CFGAS_FileWrite(pBaseStream, bReleaseStream);
1598 }
1599
1600 CFGAS_FileWrite::CFGAS_FileWrite(IFX_Stream* pStream, FX_BOOL bReleaseStream)
1601 : m_pStream(pStream), m_bReleaseStream(bReleaseStream) {
1602 ASSERT(m_pStream != NULL);
1603 }
1604 CFGAS_FileWrite::~CFGAS_FileWrite() {
1605 if (m_bReleaseStream) {
1606 m_pStream->Release();
1607 }
1608 }
1609 FX_FILESIZE CFGAS_FileWrite::GetSize() {
1610 return m_pStream->GetLength();
1611 }
1612 FX_BOOL CFGAS_FileWrite::Flush() {
1613 m_pStream->Flush();
1614 return TRUE;
1615 }
1616 FX_BOOL CFGAS_FileWrite::WriteBlock(const void* pData, size_t size) {
1617 return m_pStream->WriteData((const uint8_t*)pData, (int32_t)size) ==
1618 (int32_t)size;
1619 }
1620 FX_BOOL CFGAS_FileWrite::WriteBlock(const void* pData,
1621 FX_FILESIZE offset,
1622 size_t size) {
1623 m_pStream->Seek(FX_STREAMSEEK_Begin, offset);
1624 int32_t iLen = m_pStream->WriteData((uint8_t*)pData, (int32_t)size);
1625 return iLen == (int32_t)size;
1626 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698