unsigned long _FTStreamRead(FXFT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count) { if (count == 0) { return 0; } IFX_FileRead* pFile = (IFX_FileRead*)stream->descriptor.pointer; int res = pFile->ReadBlock(buffer, offset, count); if (res) { return count; } return 0; }
static unsigned long FPF_SkiaStream_Read(FXFT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count) { IFX_FileRead *pFileRead = (IFX_FileRead*)stream->descriptor.pointer; if (!pFileRead) { return 0; } if (count > 0) { if (pFileRead->ReadBlock(buffer, (FX_FILESIZE)offset, (size_t)count) != count) { return 0; } } return count; }
FX_BOOL CPDF_Stream::Identical(CPDF_Stream* pOther) const { if (!m_pDict) return !pOther->m_pDict; if (!m_pDict->Identical(pOther->m_pDict)) return FALSE; if (m_dwSize != pOther->m_dwSize) return FALSE; if (!IsMemoryBased() && !pOther->IsMemoryBased()) { if (m_pFile == pOther->m_pFile && !m_pFile) return TRUE; if (!m_pFile || !pOther->m_pFile) return FALSE; uint8_t srcBuf[kBlockSize]; uint8_t destBuf[kBlockSize]; FX_DWORD size = m_dwSize; if (m_pFile == pOther->m_pFile) return TRUE; FX_DWORD offset = 0; while (size > 0) { FX_DWORD actualSize = std::min(size, kBlockSize); m_pFile->ReadBlock(srcBuf, offset, actualSize); pOther->m_pFile->ReadBlock(destBuf, offset, actualSize); if (FXSYS_memcmp(srcBuf, destBuf, actualSize) != 0) return FALSE; size -= actualSize; offset += actualSize; } return TRUE; } if (!IsMemoryBased() || !pOther->IsMemoryBased()) { IFX_FileRead* pFile = nullptr; uint8_t* pBuf = nullptr; if (!pOther->IsMemoryBased()) { pFile = pOther->m_pFile; pBuf = m_pDataBuf; } else if (!IsMemoryBased()) { pFile = m_pFile; pBuf = pOther->m_pDataBuf; } if (!pBuf) return FALSE; uint8_t srcBuf[kBlockSize]; FX_DWORD size = m_dwSize; FX_DWORD offset = 0; while (size > 0) { FX_DWORD actualSize = std::min(size, kBlockSize); pFile->ReadBlock(srcBuf, offset, actualSize); if (FXSYS_memcmp(srcBuf, pBuf, actualSize) != 0) return FALSE; pBuf += actualSize; size -= actualSize; offset += actualSize; } return TRUE; } return FXSYS_memcmp(m_pDataBuf, pOther->m_pDataBuf, m_dwSize) == 0; }
FX_BOOL CPDF_Stream::Identical(CPDF_Stream* pOther) const { if (!m_pDict) return pOther->m_pDict ? FALSE : TRUE; if (!m_pDict->Identical(pOther->m_pDict)) { return FALSE; } if (m_dwSize != pOther->m_dwSize) { return FALSE; } if (m_GenNum != (FX_DWORD) - 1 && pOther->m_GenNum != (FX_DWORD) - 1) { if (m_pFile == pOther->m_pFile && m_pFile == NULL) { return TRUE; } if (!m_pFile || !pOther->m_pFile) { return FALSE; } uint8_t srcBuf[1024]; uint8_t destBuf[1024]; FX_DWORD size = m_dwSize; FX_DWORD srcOffset = m_FileOffset; FX_DWORD destOffset = pOther->m_FileOffset; if (m_pFile == pOther->m_pFile && srcOffset == destOffset) { return TRUE; } while (size > 0) { FX_DWORD actualSize = size > 1024 ? 1024 : size; m_pFile->ReadBlock(srcBuf, srcOffset, actualSize); pOther->m_pFile->ReadBlock(destBuf, destOffset, actualSize); if (FXSYS_memcmp(srcBuf, destBuf, actualSize) != 0) { return FALSE; } size -= actualSize; srcOffset += actualSize; destOffset += actualSize; } return TRUE; } if (m_GenNum != (FX_DWORD) - 1 || pOther->m_GenNum != (FX_DWORD) - 1) { IFX_FileRead* pFile = NULL; uint8_t* pBuf = NULL; FX_DWORD offset = 0; if (pOther->m_GenNum != (FX_DWORD) - 1) { pFile = pOther->m_pFile; pBuf = m_pDataBuf; offset = pOther->m_FileOffset; } else if (m_GenNum != (FX_DWORD) - 1) { pFile = m_pFile; pBuf = pOther->m_pDataBuf; offset = m_FileOffset; } if (NULL == pBuf) { return FALSE; } uint8_t srcBuf[1024]; FX_DWORD size = m_dwSize; while (size > 0) { FX_DWORD actualSize = std::min(size, 1024U); pFile->ReadBlock(srcBuf, offset, actualSize); if (FXSYS_memcmp(srcBuf, pBuf, actualSize) != 0) { return FALSE; } pBuf += actualSize; size -= actualSize; offset += actualSize; } return TRUE; } return FXSYS_memcmp(m_pDataBuf, pOther->m_pDataBuf, m_dwSize) == 0; }