| // Copyright 2026 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "core/fxcrt/cfx_fileaccess_stream.h" |
| |
| #include <utility> |
| |
| // static |
| RetainPtr<CFX_FileAccessStream> CFX_FileAccessStream::CreateFromFilename( |
| const char* filename) { |
| std::unique_ptr<FileAccessIface> file_access = FileAccessIface::Create(); |
| if (!file_access->Open(filename)) { |
| return nullptr; |
| } |
| return pdfium::MakeRetain<CFX_FileAccessStream>(std::move(file_access)); |
| } |
| |
| CFX_FileAccessStream::CFX_FileAccessStream(std::unique_ptr<FileAccessIface> pFA) |
| : file_(std::move(pFA)) {} |
| |
| CFX_FileAccessStream::~CFX_FileAccessStream() = default; |
| |
| FX_FILESIZE CFX_FileAccessStream::GetSize() { |
| return file_->GetSize(); |
| } |
| |
| bool CFX_FileAccessStream::IsEOF() { |
| return GetPosition() >= GetSize(); |
| } |
| |
| FX_FILESIZE CFX_FileAccessStream::GetPosition() { |
| return file_->GetPosition(); |
| } |
| |
| bool CFX_FileAccessStream::ReadBlockAtOffset(pdfium::span<uint8_t> buffer, |
| FX_FILESIZE offset) { |
| return file_->ReadPos(buffer, offset) > 0; |
| } |
| |
| bool CFX_FileAccessStream::WriteBlock(pdfium::span<const uint8_t> buffer) { |
| if (file_->SetPosition(GetSize()) == static_cast<FX_FILESIZE>(-1)) { |
| return false; |
| } |
| return !!file_->Write(buffer); |
| } |
| |
| bool CFX_FileAccessStream::Flush() { |
| return file_->Flush(); |
| } |