OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <errno.h> | 5 #include <errno.h> |
6 #include <fcntl.h> | 6 #include <fcntl.h> |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <sandbox.h> | 8 #include <sandbox.h> |
9 #include <stddef.h> | 9 #include <stddef.h> |
10 #include <stdint.h> | 10 #include <stdint.h> |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 return false; | 170 return false; |
171 | 171 |
172 for (size_t i = 0; i < udif_parser.GetNumberOfPartitions(); ++i) { | 172 for (size_t i = 0; i < udif_parser.GetNumberOfPartitions(); ++i) { |
173 printf("=== Partition #%zu: %s ===\n", i, | 173 printf("=== Partition #%zu: %s ===\n", i, |
174 udif_parser.GetPartitionName(i).c_str()); | 174 udif_parser.GetPartitionName(i).c_str()); |
175 | 175 |
176 std::string partition_type = udif_parser.GetPartitionType(i); | 176 std::string partition_type = udif_parser.GetPartitionType(i); |
177 if (partition_type != "Apple_HFS" && partition_type != "Apple_HFSX") | 177 if (partition_type != "Apple_HFS" && partition_type != "Apple_HFSX") |
178 continue; | 178 continue; |
179 | 179 |
180 scoped_ptr<safe_browsing::dmg::ReadStream> partition_stream( | 180 std::unique_ptr<safe_browsing::dmg::ReadStream> partition_stream( |
181 udif_parser.GetPartitionReadStream(i)); | 181 udif_parser.GetPartitionReadStream(i)); |
182 safe_browsing::dmg::HFSIterator iterator(partition_stream.get()); | 182 safe_browsing::dmg::HFSIterator iterator(partition_stream.get()); |
183 if (!iterator.Open()) { | 183 if (!iterator.Open()) { |
184 LOG(ERROR) << "Failed to open HFS partition"; | 184 LOG(ERROR) << "Failed to open HFS partition"; |
185 continue; | 185 continue; |
186 } | 186 } |
187 | 187 |
188 while (iterator.Next()) { | 188 while (iterator.Next()) { |
189 std::string path = base::UTF16ToUTF8(iterator.GetPath()); | 189 std::string path = base::UTF16ToUTF8(iterator.GetPath()); |
190 printf("%s\n", path.c_str()); | 190 printf("%s\n", path.c_str()); |
(...skipping 23 matching lines...) Expand all Loading... |
214 } | 214 } |
215 } else { | 215 } else { |
216 base::ScopedFD unpacked( | 216 base::ScopedFD unpacked( |
217 HANDLE_EINTR(openat(unpack_dir_.get(), path.c_str(), | 217 HANDLE_EINTR(openat(unpack_dir_.get(), path.c_str(), |
218 O_WRONLY | O_CREAT | O_TRUNC, 0644))); | 218 O_WRONLY | O_CREAT | O_TRUNC, 0644))); |
219 if (!unpacked.is_valid()) { | 219 if (!unpacked.is_valid()) { |
220 PLOG(ERROR) << "openat " << path; | 220 PLOG(ERROR) << "openat " << path; |
221 continue; | 221 continue; |
222 } | 222 } |
223 | 223 |
224 scoped_ptr<safe_browsing::dmg::ReadStream> stream( | 224 std::unique_ptr<safe_browsing::dmg::ReadStream> stream( |
225 iterator.GetReadStream()); | 225 iterator.GetReadStream()); |
226 size_t read_this_pass = 0; | 226 size_t read_this_pass = 0; |
227 do { | 227 do { |
228 uint8_t buf[4096]; | 228 uint8_t buf[4096]; |
229 if (!stream->Read(buf, sizeof(buf), &read_this_pass)) { | 229 if (!stream->Read(buf, sizeof(buf), &read_this_pass)) { |
230 LOG(ERROR) << "Failed to read stream: " << path; | 230 LOG(ERROR) << "Failed to read stream: " << path; |
231 unlinkat(unpack_dir_.get(), path.c_str(), 0); | 231 unlinkat(unpack_dir_.get(), path.c_str(), 0); |
232 break; | 232 break; |
233 } | 233 } |
234 | 234 |
(...skipping 13 matching lines...) Expand all Loading... |
248 | 248 |
249 return true; | 249 return true; |
250 } | 250 } |
251 | 251 |
252 } // namespace | 252 } // namespace |
253 | 253 |
254 int main(int argc, const char* argv[]) { | 254 int main(int argc, const char* argv[]) { |
255 SafeDMG safe_dmg; | 255 SafeDMG safe_dmg; |
256 return safe_dmg.Main(argc, argv); | 256 return safe_dmg.Main(argc, argv); |
257 } | 257 } |
OLD | NEW |