| 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 <dirent.h> | 7 #include <dirent.h> |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <fcntl.h> | 9 #include <fcntl.h> |
| 10 #include <libgen.h> | 10 #include <libgen.h> |
| (...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 results->last_accessed = Time::FromTimeT(file_info.st_atime); | 682 results->last_accessed = Time::FromTimeT(file_info.st_atime); |
| 683 results->creation_time = Time::FromTimeT(file_info.st_ctime); | 683 results->creation_time = Time::FromTimeT(file_info.st_ctime); |
| 684 #else | 684 #else |
| 685 results->last_modified = Time::FromTimeSpec(file_info.st_mtim); | 685 results->last_modified = Time::FromTimeSpec(file_info.st_mtim); |
| 686 results->last_accessed = Time::FromTimeSpec(file_info.st_atim); | 686 results->last_accessed = Time::FromTimeSpec(file_info.st_atim); |
| 687 results->creation_time = Time::FromTimeSpec(file_info.st_ctim); | 687 results->creation_time = Time::FromTimeSpec(file_info.st_ctim); |
| 688 #endif | 688 #endif |
| 689 return true; | 689 return true; |
| 690 } | 690 } |
| 691 | 691 |
| 692 FILE* OpenFile(const FilePath& filename, const char* mode) { | |
| 693 ThreadRestrictions::AssertIOAllowed(); | |
| 694 FILE* result = NULL; | |
| 695 do { | |
| 696 result = fopen(filename.value().c_str(), mode); | |
| 697 } while (!result && errno == EINTR); | |
| 698 return result; | |
| 699 } | |
| 700 | |
| 701 int ReadFile(const FilePath& filename, char* data, int size) { | |
| 702 ThreadRestrictions::AssertIOAllowed(); | |
| 703 int fd = HANDLE_EINTR(open(filename.value().c_str(), O_RDONLY)); | |
| 704 if (fd < 0) | |
| 705 return -1; | |
| 706 | |
| 707 ssize_t bytes_read = HANDLE_EINTR(read(fd, data, size)); | |
| 708 if (int ret = IGNORE_EINTR(close(fd)) < 0) | |
| 709 return ret; | |
| 710 return bytes_read; | |
| 711 } | |
| 712 | |
| 713 } // namespace base | 692 } // namespace base |
| 714 | 693 |
| 715 // ----------------------------------------------------------------------------- | 694 // ----------------------------------------------------------------------------- |
| 716 | 695 |
| 717 namespace file_util { | 696 namespace file_util { |
| 718 | 697 |
| 719 using base::stat_wrapper_t; | 698 using base::stat_wrapper_t; |
| 720 using base::CallStat; | 699 using base::CallStat; |
| 721 using base::CallLstat; | 700 using base::CallLstat; |
| 722 using base::CreateAndOpenFdForTemporaryFile; | 701 using base::CreateAndOpenFdForTemporaryFile; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 737 path.InsertBeforeExtensionASCII( | 716 path.InsertBeforeExtensionASCII( |
| 738 base::StringPrintf(" (%d)", uniquifier)); | 717 base::StringPrintf(" (%d)", uniquifier)); |
| 739 if (mkdir(test_path.value().c_str(), 0777) == 0) | 718 if (mkdir(test_path.value().c_str(), 0777) == 0) |
| 740 return test_path; | 719 return test_path; |
| 741 else if (errno != EEXIST) | 720 else if (errno != EEXIST) |
| 742 break; | 721 break; |
| 743 } | 722 } |
| 744 return base::FilePath(); | 723 return base::FilePath(); |
| 745 } | 724 } |
| 746 | 725 |
| 726 bool GetInode(const FilePath& path, ino_t* inode) { |
| 727 base::ThreadRestrictions::AssertIOAllowed(); // For call to stat(). |
| 728 struct stat buffer; |
| 729 int result = stat(path.value().c_str(), &buffer); |
| 730 if (result < 0) |
| 731 return false; |
| 732 |
| 733 *inode = buffer.st_ino; |
| 734 return true; |
| 735 } |
| 736 |
| 747 FILE* OpenFile(const std::string& filename, const char* mode) { | 737 FILE* OpenFile(const std::string& filename, const char* mode) { |
| 748 return OpenFile(FilePath(filename), mode); | 738 return OpenFile(FilePath(filename), mode); |
| 749 } | 739 } |
| 750 | 740 |
| 741 FILE* OpenFile(const FilePath& filename, const char* mode) { |
| 742 base::ThreadRestrictions::AssertIOAllowed(); |
| 743 FILE* result = NULL; |
| 744 do { |
| 745 result = fopen(filename.value().c_str(), mode); |
| 746 } while (!result && errno == EINTR); |
| 747 return result; |
| 748 } |
| 749 |
| 750 int ReadFile(const FilePath& filename, char* data, int size) { |
| 751 base::ThreadRestrictions::AssertIOAllowed(); |
| 752 int fd = HANDLE_EINTR(open(filename.value().c_str(), O_RDONLY)); |
| 753 if (fd < 0) |
| 754 return -1; |
| 755 |
| 756 ssize_t bytes_read = HANDLE_EINTR(read(fd, data, size)); |
| 757 if (int ret = IGNORE_EINTR(close(fd)) < 0) |
| 758 return ret; |
| 759 return bytes_read; |
| 760 } |
| 761 |
| 751 int WriteFile(const FilePath& filename, const char* data, int size) { | 762 int WriteFile(const FilePath& filename, const char* data, int size) { |
| 752 base::ThreadRestrictions::AssertIOAllowed(); | 763 base::ThreadRestrictions::AssertIOAllowed(); |
| 753 int fd = HANDLE_EINTR(creat(filename.value().c_str(), 0666)); | 764 int fd = HANDLE_EINTR(creat(filename.value().c_str(), 0666)); |
| 754 if (fd < 0) | 765 if (fd < 0) |
| 755 return -1; | 766 return -1; |
| 756 | 767 |
| 757 int bytes_written = WriteFileDescriptor(fd, data, size); | 768 int bytes_written = WriteFileDescriptor(fd, data, size); |
| 758 if (int ret = IGNORE_EINTR(close(fd)) < 0) | 769 if (int ret = IGNORE_EINTR(close(fd)) < 0) |
| 759 return ret; | 770 return ret; |
| 760 return bytes_written; | 771 return bytes_written; |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 result = false; | 969 result = false; |
| 959 if (IGNORE_EINTR(close(outfile)) < 0) | 970 if (IGNORE_EINTR(close(outfile)) < 0) |
| 960 result = false; | 971 result = false; |
| 961 | 972 |
| 962 return result; | 973 return result; |
| 963 } | 974 } |
| 964 #endif // !defined(OS_MACOSX) | 975 #endif // !defined(OS_MACOSX) |
| 965 | 976 |
| 966 } // namespace internal | 977 } // namespace internal |
| 967 } // namespace base | 978 } // namespace base |
| OLD | NEW |