| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium 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 "chrome/utility/image_writer/image_writer.h" |
| 6 |
| 5 #include "base/memory/aligned_memory.h" | 7 #include "base/memory/aligned_memory.h" |
| 6 #include "chrome/utility/image_writer/error_messages.h" | 8 #include "chrome/utility/image_writer/error_messages.h" |
| 7 #include "chrome/utility/image_writer/image_writer.h" | |
| 8 #include "chrome/utility/image_writer/image_writer_handler.h" | 9 #include "chrome/utility/image_writer/image_writer_handler.h" |
| 9 #include "content/public/utility/utility_thread.h" | 10 #include "content/public/utility/utility_thread.h" |
| 10 | 11 |
| 12 #if defined(OS_MACOSX) |
| 13 #include "chrome/utility/image_writer/disk_unmounter_mac.h" |
| 14 #endif |
| 15 |
| 11 namespace image_writer { | 16 namespace image_writer { |
| 12 | 17 |
| 13 // Since block devices like large sequential access and IPC is expensive we're | 18 // Since block devices like large sequential access and IPC is expensive we're |
| 14 // doing work in 1MB chunks. | 19 // doing work in 1MB chunks. |
| 15 const int kBurningBlockSize = 1 << 20; // 1 MB | 20 const int kBurningBlockSize = 1 << 20; // 1 MB |
| 16 const int kMemoryAlignment = 4096; | 21 const int kMemoryAlignment = 4096; |
| 17 | 22 |
| 18 ImageWriter::ImageWriter(ImageWriterHandler* handler, | 23 ImageWriter::ImageWriter(ImageWriterHandler* handler, |
| 19 const base::FilePath& image_path, | 24 const base::FilePath& image_path, |
| 20 const base::FilePath& device_path) | 25 const base::FilePath& device_path) |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 base::File::FLAG_EXCLUSIVE_READ); | 88 base::File::FLAG_EXCLUSIVE_READ); |
| 84 | 89 |
| 85 if (!image_file_.IsValid()) { | 90 if (!image_file_.IsValid()) { |
| 86 DLOG(ERROR) << "Unable to open file for read: " << image_path_.value(); | 91 DLOG(ERROR) << "Unable to open file for read: " << image_path_.value(); |
| 87 Error(error::kOpenImage); | 92 Error(error::kOpenImage); |
| 88 return false; | 93 return false; |
| 89 } | 94 } |
| 90 } | 95 } |
| 91 | 96 |
| 92 if (!device_file_.IsValid()) { | 97 if (!device_file_.IsValid()) { |
| 93 #if defined(OS_WIN) | 98 if (!OpenDevice()) { |
| 94 // Windows requires that device files be opened with FILE_FLAG_NO_BUFFERING | |
| 95 // and FILE_FLAG_WRITE_THROUGH. These two flags are not part of base::File. | |
| 96 device_file_ = | |
| 97 base::File(CreateFile(device_path_.value().c_str(), | |
| 98 GENERIC_READ | GENERIC_WRITE, | |
| 99 FILE_SHARE_READ | FILE_SHARE_WRITE, | |
| 100 NULL, | |
| 101 OPEN_EXISTING, | |
| 102 FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, | |
| 103 NULL)); | |
| 104 #else | |
| 105 device_file_.Initialize( | |
| 106 device_path_, | |
| 107 base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE | | |
| 108 base::File::FLAG_EXCLUSIVE_READ | base::File::FLAG_EXCLUSIVE_WRITE); | |
| 109 #endif | |
| 110 if (!device_file_.IsValid()) { | |
| 111 Error(error::kOpenDevice); | 99 Error(error::kOpenDevice); |
| 112 return false; | 100 return false; |
| 113 } | 101 } |
| 114 } | 102 } |
| 115 | 103 |
| 116 bytes_processed_ = 0; | 104 bytes_processed_ = 0; |
| 117 running_ = true; | 105 running_ = true; |
| 118 | 106 |
| 119 return true; | 107 return true; |
| 120 } | 108 } |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 running_ = false; | 188 running_ = false; |
| 201 } else { | 189 } else { |
| 202 // Unable to read entire file. | 190 // Unable to read entire file. |
| 203 LOG(ERROR) << "Failed to read " << kBurningBlockSize << " bytes of image " | 191 LOG(ERROR) << "Failed to read " << kBurningBlockSize << " bytes of image " |
| 204 << "at offset " << bytes_processed_; | 192 << "at offset " << bytes_processed_; |
| 205 Error(error::kReadImage); | 193 Error(error::kReadImage); |
| 206 } | 194 } |
| 207 } | 195 } |
| 208 | 196 |
| 209 } // namespace image_writer | 197 } // namespace image_writer |
| OLD | NEW |