Index: src/platform/update_engine/split_file_writer.h |
diff --git a/src/platform/update_engine/split_file_writer.h b/src/platform/update_engine/split_file_writer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cba816136400721a2f64efeefe7266ccffa96858 |
--- /dev/null |
+++ b/src/platform/update_engine/split_file_writer.h |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2010 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_SPLIT_FILE_WRITER_H__ |
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_SPLIT_FILE_WRITER_H__ |
+ |
+#include "update_engine/file_writer.h" |
+ |
+// SplitFileWriter is an implementation of FileWriter suited to our |
+// full autoupdate format. The first 8 bytes read are assumed to be a |
+// big-endian number describing how many of the next following bytes |
+// go to the first FileWriter. After that, the rest of the bytes all |
+// go to the second FileWriter. |
+ |
+namespace chromeos_update_engine { |
+ |
+class SplitFileWriter : public FileWriter { |
+ public: |
+ SplitFileWriter(FileWriter* first_file_writer, FileWriter* second_file_writer) |
+ : first_file_writer_(first_file_writer), |
+ first_length_(0), |
+ first_path_(NULL), |
+ first_flags_(0), |
+ first_mode_(0), |
+ second_file_writer_(second_file_writer), |
+ bytes_received_(0) {} |
+ |
+ void SetFirstOpenArgs(const char* path, int flags, mode_t mode) { |
+ first_path_ = path; |
+ first_flags_ = flags; |
+ first_mode_ = mode; |
+ } |
+ |
+ // If both succeed, returns the return value from the second Open() call. |
+ // On error, both files will be left closed. |
+ virtual int Open(const char* path, int flags, mode_t mode); |
+ |
+ virtual ssize_t Write(const void* bytes, size_t count); |
+ |
+ virtual int Close(); |
+ |
+ private: |
+ // Data for the first file writer. |
+ FileWriter* const first_file_writer_; |
+ off_t first_length_; |
+ const char* first_path_; |
+ int first_flags_; |
+ mode_t first_mode_; |
+ |
+ // The scond file writeer. |
+ FileWriter* const second_file_writer_; |
+ |
+ // Bytes written thus far |
+ off_t bytes_received_; |
+ char first_length_buf_[sizeof(uint64_t)]; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SplitFileWriter); |
+}; |
+ |
+} // namespace chromeos_update_engine |
+ |
+#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_SPLIT_FILE_WRITER_H__ |