summaryrefslogtreecommitdiff
path: root/sink_file.h
diff options
context:
space:
mode:
authorSen Jiang <senj@google.com>2016-05-09 16:43:34 -0700
committerSen Jiang <senj@google.com>2017-02-02 14:42:45 -0800
commit716d569273ef2aeacfe7555f60f7784b2366225d (patch)
treebe33f4bfa1310cb51e9840a3406acd1f4e79e2ac /sink_file.h
parent02416b52d7890edace797b5bc6902d61601a30b5 (diff)
downloadbsdiff-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.h41
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_