OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/file_util.h" | 5 #include "base/file_util.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <psapi.h> | 8 #include <psapi.h> |
9 #include <shellapi.h> | 9 #include <shellapi.h> |
10 #include <shlobj.h> | 10 #include <shlobj.h> |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 // TODO(jrg): is there equivalent call to use on Windows instead of | 257 // TODO(jrg): is there equivalent call to use on Windows instead of |
258 // going 2-step? | 258 // going 2-step? |
259 FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath* path) { | 259 FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath* path) { |
260 ThreadRestrictions::AssertIOAllowed(); | 260 ThreadRestrictions::AssertIOAllowed(); |
261 if (!CreateTemporaryFileInDir(dir, path)) { | 261 if (!CreateTemporaryFileInDir(dir, path)) { |
262 return NULL; | 262 return NULL; |
263 } | 263 } |
264 // Open file in binary mode, to avoid problems with fwrite. On Windows | 264 // Open file in binary mode, to avoid problems with fwrite. On Windows |
265 // it replaces \n's with \r\n's, which may surprise you. | 265 // it replaces \n's with \r\n's, which may surprise you. |
266 // Reference: http://msdn.microsoft.com/en-us/library/h9t88zwz(VS.71).aspx | 266 // Reference: http://msdn.microsoft.com/en-us/library/h9t88zwz(VS.71).aspx |
267 return file_util::OpenFile(*path, "wb+"); | 267 return OpenFile(*path, "wb+"); |
268 } | 268 } |
269 | 269 |
270 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) { | 270 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) { |
271 ThreadRestrictions::AssertIOAllowed(); | 271 ThreadRestrictions::AssertIOAllowed(); |
272 | 272 |
273 wchar_t temp_name[MAX_PATH + 1]; | 273 wchar_t temp_name[MAX_PATH + 1]; |
274 | 274 |
275 if (!GetTempFileName(dir.value().c_str(), L"", 0, temp_name)) { | 275 if (!GetTempFileName(dir.value().c_str(), L"", 0, temp_name)) { |
276 DPLOG(WARNING) << "Failed to get temporary file name in " | 276 DPLOG(WARNING) << "Failed to get temporary file name in " |
277 << UTF16ToUTF8(dir.value()); | 277 << UTF16ToUTF8(dir.value()); |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 | 523 |
524 results->is_directory = | 524 results->is_directory = |
525 (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; | 525 (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; |
526 results->last_modified = Time::FromFileTime(attr.ftLastWriteTime); | 526 results->last_modified = Time::FromFileTime(attr.ftLastWriteTime); |
527 results->last_accessed = Time::FromFileTime(attr.ftLastAccessTime); | 527 results->last_accessed = Time::FromFileTime(attr.ftLastAccessTime); |
528 results->creation_time = Time::FromFileTime(attr.ftCreationTime); | 528 results->creation_time = Time::FromFileTime(attr.ftCreationTime); |
529 | 529 |
530 return true; | 530 return true; |
531 } | 531 } |
532 | 532 |
533 } // namespace base | |
534 | |
535 // ----------------------------------------------------------------------------- | |
536 | |
537 namespace file_util { | |
538 | |
539 using base::DirectoryExists; | |
540 using base::FilePath; | |
541 using base::kFileShareAll; | |
542 | |
543 FILE* OpenFile(const FilePath& filename, const char* mode) { | 533 FILE* OpenFile(const FilePath& filename, const char* mode) { |
544 base::ThreadRestrictions::AssertIOAllowed(); | 534 ThreadRestrictions::AssertIOAllowed(); |
545 std::wstring w_mode = ASCIIToWide(std::string(mode)); | 535 std::wstring w_mode = ASCIIToWide(std::string(mode)); |
546 return _wfsopen(filename.value().c_str(), w_mode.c_str(), _SH_DENYNO); | 536 return _wfsopen(filename.value().c_str(), w_mode.c_str(), _SH_DENYNO); |
547 } | 537 } |
548 | 538 |
549 FILE* OpenFile(const std::string& filename, const char* mode) { | |
550 base::ThreadRestrictions::AssertIOAllowed(); | |
551 return _fsopen(filename.c_str(), mode, _SH_DENYNO); | |
552 } | |
553 | |
554 int ReadFile(const FilePath& filename, char* data, int size) { | 539 int ReadFile(const FilePath& filename, char* data, int size) { |
555 base::ThreadRestrictions::AssertIOAllowed(); | 540 ThreadRestrictions::AssertIOAllowed(); |
556 base::win::ScopedHandle file(CreateFile(filename.value().c_str(), | 541 base::win::ScopedHandle file(CreateFile(filename.value().c_str(), |
557 GENERIC_READ, | 542 GENERIC_READ, |
558 FILE_SHARE_READ | FILE_SHARE_WRITE, | 543 FILE_SHARE_READ | FILE_SHARE_WRITE, |
559 NULL, | 544 NULL, |
560 OPEN_EXISTING, | 545 OPEN_EXISTING, |
561 FILE_FLAG_SEQUENTIAL_SCAN, | 546 FILE_FLAG_SEQUENTIAL_SCAN, |
562 NULL)); | 547 NULL)); |
563 if (!file) | 548 if (!file) |
564 return -1; | 549 return -1; |
565 | 550 |
566 DWORD read; | 551 DWORD read; |
567 if (::ReadFile(file, data, size, &read, NULL) && | 552 if (::ReadFile(file, data, size, &read, NULL) && |
568 static_cast<int>(read) == size) | 553 static_cast<int>(read) == size) |
569 return read; | 554 return read; |
570 return -1; | 555 return -1; |
571 } | 556 } |
572 | 557 |
| 558 } // namespace base |
| 559 |
| 560 // ----------------------------------------------------------------------------- |
| 561 |
| 562 namespace file_util { |
| 563 |
| 564 using base::DirectoryExists; |
| 565 using base::FilePath; |
| 566 using base::kFileShareAll; |
| 567 |
| 568 FILE* OpenFile(const std::string& filename, const char* mode) { |
| 569 base::ThreadRestrictions::AssertIOAllowed(); |
| 570 return _fsopen(filename.c_str(), mode, _SH_DENYNO); |
| 571 } |
| 572 |
573 int WriteFile(const FilePath& filename, const char* data, int size) { | 573 int WriteFile(const FilePath& filename, const char* data, int size) { |
574 base::ThreadRestrictions::AssertIOAllowed(); | 574 base::ThreadRestrictions::AssertIOAllowed(); |
575 base::win::ScopedHandle file(CreateFile(filename.value().c_str(), | 575 base::win::ScopedHandle file(CreateFile(filename.value().c_str(), |
576 GENERIC_WRITE, | 576 GENERIC_WRITE, |
577 0, | 577 0, |
578 NULL, | 578 NULL, |
579 CREATE_ALWAYS, | 579 CREATE_ALWAYS, |
580 0, | 580 0, |
581 NULL)); | 581 NULL)); |
582 if (!file) { | 582 if (!file) { |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 // Like Move, this function is not transactional, so we just | 744 // Like Move, this function is not transactional, so we just |
745 // leave the copied bits behind if deleting from_path fails. | 745 // leave the copied bits behind if deleting from_path fails. |
746 // If to_path exists previously then we have already overwritten | 746 // If to_path exists previously then we have already overwritten |
747 // it by now, we don't get better off by deleting the new bits. | 747 // it by now, we don't get better off by deleting the new bits. |
748 } | 748 } |
749 return false; | 749 return false; |
750 } | 750 } |
751 | 751 |
752 } // namespace internal | 752 } // namespace internal |
753 } // namespace base | 753 } // namespace base |
OLD | NEW |