blob: b855c81cb1d41a6bf33e1a8060b0ab82f868d81b [file] [log] [blame]
// 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();
}