diff options
author | Sen Jiang <senj@google.com> | 2016-05-09 16:43:34 -0700 |
---|---|---|
committer | Sen Jiang <senj@google.com> | 2017-02-02 14:42:45 -0800 |
commit | 716d569273ef2aeacfe7555f60f7784b2366225d (patch) | |
tree | be33f4bfa1310cb51e9840a3406acd1f4e79e2ac /sink_file.h | |
parent | 02416b52d7890edace797b5bc6902d61601a30b5 (diff) | |
download | bsdiff-716d569273ef2aeacfe7555f60f7784b2366225d.tar.gz |
Provide interface for in memory bspatch.
Renamed existing MemoryFile to BufferFile, and added a read only
MemoryFile to provide file interface to read file data already in
memory without extra copy (extra memory usage).
Added write only SinkFile to provide sink function support used in
applypatch. It will enable imgpatch the ability to stream output.
Test: mma
Bug: 26982501
Change-Id: I025ce4064c9f46623dd73f24d30e21e88f08a292
Diffstat (limited to 'sink_file.h')
-rw-r--r-- | sink_file.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sink_file.h b/sink_file.h new file mode 100644 index 0000000..b2ce33f --- /dev/null +++ b/sink_file.h @@ -0,0 +1,41 @@ +// 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. + +#ifndef _BSDIFF_SINK_FILE_H_ +#define _BSDIFF_SINK_FILE_H_ + +#include <stdint.h> + +#include <functional> + +#include "file_interface.h" + +using sink_func = std::function<size_t(const uint8_t*, size_t)>; + +namespace bsdiff { + +class SinkFile : public FileInterface { + public: + // Creates a SinkFile based on the underlying |sink| function passed. + // The SinkFile will call |sink| function upon write. + // Read, Seek and GetSize are not supported. + explicit SinkFile(const sink_func& sink); + + ~SinkFile() = default; + + // FileInterface overrides. + bool Read(void* buf, size_t count, size_t* bytes_read) override; + bool Write(const void* buf, size_t count, size_t* bytes_written) override; + bool Seek(off_t pos) override; + bool Close() override; + bool GetSize(uint64_t* size) override; + + private: + // The sink() function used to write data. + const sink_func& sink_; +}; + +} // namespace bsdiff + +#endif // _BSDIFF_SINK_FILE_H_ |