// Copyright 2016 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "bsdiff/buffer_file.h" #include "bsdiff/bspatch.h" namespace bsdiff { BufferFile::BufferFile(std::unique_ptr<FileInterface> file, size_t size) : file_(std::move(file)) { buffer_.reserve(size); } BufferFile::~BufferFile() { Close(); } bool BufferFile::Read(void* buf, size_t count, size_t* bytes_read) { return false; } bool BufferFile::Write(const void* buf, size_t count, size_t* bytes_written) { const uint8_t* data = static_cast<const uint8_t*>(buf); buffer_.insert(buffer_.end(), data, data + count); *bytes_written = count; return true; } bool BufferFile::Seek(off_t pos) { return false; } bool BufferFile::Close() { if (!WriteAll(file_, buffer_.data(), buffer_.size())) return false; // Prevent writing |buffer_| to |file_| again if Close() is called more than // once. buffer_.clear(); return file_->Close(); } bool BufferFile::GetSize(uint64_t* size) { *size = buffer_.size(); return true; } } // namespace bsdiff