| // 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__ |