blob: 5f8a66d327acb43a6dac820d4c76162007ccdb5f [file] [log] [blame]
Sen Jiang716d5692016-05-09 16:43:34 -07001// Copyright 2016 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Alex Deymodcd423b2017-09-13 20:54:24 +02005#include "bsdiff/buffer_file.h"
Sen Jiang716d5692016-05-09 16:43:34 -07006
Alex Deymoddf9db52017-03-02 16:10:41 -08007#include "bsdiff/bspatch.h"
Sen Jiang716d5692016-05-09 16:43:34 -07008
9namespace bsdiff {
10
11BufferFile::BufferFile(std::unique_ptr<FileInterface> file, size_t size)
12 : file_(std::move(file)) {
13 buffer_.reserve(size);
14}
15
16BufferFile::~BufferFile() {
17 Close();
18}
19
20bool BufferFile::Read(void* buf, size_t count, size_t* bytes_read) {
21 return false;
22}
23
24bool BufferFile::Write(const void* buf, size_t count, size_t* bytes_written) {
25 const uint8_t* data = static_cast<const uint8_t*>(buf);
26 buffer_.insert(buffer_.end(), data, data + count);
27 *bytes_written = count;
28 return true;
29}
30
31bool BufferFile::Seek(off_t pos) {
32 return false;
33}
34
35bool BufferFile::Close() {
36 if (!WriteAll(file_, buffer_.data(), buffer_.size()))
37 return false;
38 // Prevent writing |buffer_| to |file_| again if Close() is called more than
39 // once.
40 buffer_.clear();
41 return file_->Close();
42}
43
44bool BufferFile::GetSize(uint64_t* size) {
45 *size = buffer_.size();
46 return true;
47}
48
49} // namespace bsdiff