OLD | NEW |
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "update_engine/split_file_writer.h" | 5 #include "update_engine/split_file_writer.h" |
6 #include <algorithm> | 6 #include <algorithm> |
7 | 7 |
8 using std::min; | 8 using std::min; |
9 | 9 |
10 namespace chromeos_update_engine { | 10 namespace chromeos_update_engine { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 } | 42 } |
43 | 43 |
44 ssize_t SplitFileWriter::Write(const void* bytes, size_t count) { | 44 ssize_t SplitFileWriter::Write(const void* bytes, size_t count) { |
45 const size_t original_count = count; | 45 const size_t original_count = count; |
46 | 46 |
47 // This first block is trying to read the first sizeof(uint64_t) | 47 // This first block is trying to read the first sizeof(uint64_t) |
48 // bytes, which are the number of bytes that should be written | 48 // bytes, which are the number of bytes that should be written |
49 // to the first FileWriter. | 49 // to the first FileWriter. |
50 if (bytes_received_ < static_cast<off_t>(sizeof(uint64_t))) { | 50 if (bytes_received_ < static_cast<off_t>(sizeof(uint64_t))) { |
51 // Write more to the initial buffer | 51 // Write more to the initial buffer |
52 size_t bytes_to_copy = min(count, | 52 size_t bytes_to_copy = min(static_cast<off_t>(count), |
53 sizeof(first_length_buf_) - bytes_received_); | 53 static_cast<off_t>(sizeof(first_length_buf_)) - |
| 54 bytes_received_); |
54 memcpy(&first_length_buf_[bytes_received_], bytes, bytes_to_copy); | 55 memcpy(&first_length_buf_[bytes_received_], bytes, bytes_to_copy); |
55 bytes_received_ += bytes_to_copy; | 56 bytes_received_ += bytes_to_copy; |
56 count -= bytes_to_copy; | 57 count -= bytes_to_copy; |
57 bytes = static_cast<const void*>( | 58 bytes = static_cast<const void*>( |
58 static_cast<const char*>(bytes) + bytes_to_copy); | 59 static_cast<const char*>(bytes) + bytes_to_copy); |
59 | 60 |
60 // See if we have all we need | 61 // See if we have all we need |
61 if (bytes_received_ == sizeof(first_length_buf_)) { | 62 if (bytes_received_ == sizeof(first_length_buf_)) { |
62 // Parse first number | 63 // Parse first number |
63 uint64_t big_endian_first_length; | 64 uint64_t big_endian_first_length; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 if (first_result < 0) | 105 if (first_result < 0) |
105 LOG(ERROR) << "Error Close()ing first file."; | 106 LOG(ERROR) << "Error Close()ing first file."; |
106 int second_result = second_file_writer_->Close(); | 107 int second_result = second_file_writer_->Close(); |
107 if (second_result < 0) | 108 if (second_result < 0) |
108 LOG(ERROR) << "Error Close()ing second file."; | 109 LOG(ERROR) << "Error Close()ing second file."; |
109 // Return error if either had returned error. | 110 // Return error if either had returned error. |
110 return second_result < 0 ? second_result : first_result; | 111 return second_result < 0 ? second_result : first_result; |
111 } | 112 } |
112 | 113 |
113 } // namespace chromeos_update_engine | 114 } // namespace chromeos_update_engine |
OLD | NEW |