| 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 char full_path[PATH_MAX]; | 153 char full_path[PATH_MAX]; |
| 154 if (realpath(input.value().c_str(), full_path) == NULL) | 154 if (realpath(input.value().c_str(), full_path) == NULL) |
| 155 return FilePath(); | 155 return FilePath(); |
| 156 return FilePath(full_path); | 156 return FilePath(full_path); |
| 157 } | 157 } |
| 158 | 158 |
| 159 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*" | 159 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*" |
| 160 // which works both with and without the recursive flag. I'm not sure we need | 160 // which works both with and without the recursive flag. I'm not sure we need |
| 161 // that functionality. If not, remove from file_util_win.cc, otherwise add it | 161 // that functionality. If not, remove from file_util_win.cc, otherwise add it |
| 162 // here. | 162 // here. |
| 163 bool Delete(const FilePath& path, bool recursive) { | 163 bool DeleteFile(const FilePath& path, bool recursive) { |
| 164 ThreadRestrictions::AssertIOAllowed(); | 164 ThreadRestrictions::AssertIOAllowed(); |
| 165 const char* path_str = path.value().c_str(); | 165 const char* path_str = path.value().c_str(); |
| 166 stat_wrapper_t file_info; | 166 stat_wrapper_t file_info; |
| 167 int test = CallLstat(path_str, &file_info); | 167 int test = CallLstat(path_str, &file_info); |
| 168 if (test != 0) { | 168 if (test != 0) { |
| 169 // The Windows version defines this condition as success. | 169 // The Windows version defines this condition as success. |
| 170 bool ret = (errno == ENOENT || errno == ENOTDIR); | 170 bool ret = (errno == ENOENT || errno == ENOTDIR); |
| 171 return ret; | 171 return ret; |
| 172 } | 172 } |
| 173 if (!S_ISDIR(file_info.st_mode)) | 173 if (!S_ISDIR(file_info.st_mode)) |
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 // but its kernel allows mprotect with PROT_EXEC anyway. | 728 // but its kernel allows mprotect with PROT_EXEC anyway. |
| 729 | 729 |
| 730 namespace { | 730 namespace { |
| 731 | 731 |
| 732 bool DetermineDevShmExecutable() { | 732 bool DetermineDevShmExecutable() { |
| 733 bool result = false; | 733 bool result = false; |
| 734 FilePath path; | 734 FilePath path; |
| 735 int fd = CreateAndOpenFdForTemporaryFile(FilePath("/dev/shm"), &path); | 735 int fd = CreateAndOpenFdForTemporaryFile(FilePath("/dev/shm"), &path); |
| 736 if (fd >= 0) { | 736 if (fd >= 0) { |
| 737 ScopedFD shm_fd_closer(&fd); | 737 ScopedFD shm_fd_closer(&fd); |
| 738 Delete(path, false); | 738 DeleteFile(path, false); |
| 739 long sysconf_result = sysconf(_SC_PAGESIZE); | 739 long sysconf_result = sysconf(_SC_PAGESIZE); |
| 740 CHECK_GE(sysconf_result, 0); | 740 CHECK_GE(sysconf_result, 0); |
| 741 size_t pagesize = static_cast<size_t>(sysconf_result); | 741 size_t pagesize = static_cast<size_t>(sysconf_result); |
| 742 CHECK_GE(sizeof(pagesize), sizeof(sysconf_result)); | 742 CHECK_GE(sizeof(pagesize), sizeof(sysconf_result)); |
| 743 void *mapping = mmap(NULL, pagesize, PROT_READ, MAP_SHARED, fd, 0); | 743 void *mapping = mmap(NULL, pagesize, PROT_READ, MAP_SHARED, fd, 0); |
| 744 if (mapping != MAP_FAILED) { | 744 if (mapping != MAP_FAILED) { |
| 745 if (mprotect(mapping, pagesize, PROT_READ | PROT_EXEC) == 0) | 745 if (mprotect(mapping, pagesize, PROT_READ | PROT_EXEC) == 0) |
| 746 result = true; | 746 result = true; |
| 747 munmap(mapping, pagesize); | 747 munmap(mapping, pagesize); |
| 748 } | 748 } |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 return false; | 893 return false; |
| 894 } | 894 } |
| 895 } | 895 } |
| 896 | 896 |
| 897 if (rename(from_path.value().c_str(), to_path.value().c_str()) == 0) | 897 if (rename(from_path.value().c_str(), to_path.value().c_str()) == 0) |
| 898 return true; | 898 return true; |
| 899 | 899 |
| 900 if (!CopyDirectory(from_path, to_path, true)) | 900 if (!CopyDirectory(from_path, to_path, true)) |
| 901 return false; | 901 return false; |
| 902 | 902 |
| 903 Delete(from_path, true); | 903 DeleteFile(from_path, true); |
| 904 return true; | 904 return true; |
| 905 } | 905 } |
| 906 | 906 |
| 907 #if !defined(OS_MACOSX) | 907 #if !defined(OS_MACOSX) |
| 908 // Mac has its own implementation, this is for all other Posix systems. | 908 // Mac has its own implementation, this is for all other Posix systems. |
| 909 bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path) { | 909 bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path) { |
| 910 ThreadRestrictions::AssertIOAllowed(); | 910 ThreadRestrictions::AssertIOAllowed(); |
| 911 int infile = HANDLE_EINTR(open(from_path.value().c_str(), O_RDONLY)); | 911 int infile = HANDLE_EINTR(open(from_path.value().c_str(), O_RDONLY)); |
| 912 if (infile < 0) | 912 if (infile < 0) |
| 913 return false; | 913 return false; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 result = false; | 949 result = false; |
| 950 if (HANDLE_EINTR(close(outfile)) < 0) | 950 if (HANDLE_EINTR(close(outfile)) < 0) |
| 951 result = false; | 951 result = false; |
| 952 | 952 |
| 953 return result; | 953 return result; |
| 954 } | 954 } |
| 955 #endif // !defined(OS_MACOSX) | 955 #endif // !defined(OS_MACOSX) |
| 956 | 956 |
| 957 } // namespace internal | 957 } // namespace internal |
| 958 } // namespace base | 958 } // namespace base |
| OLD | NEW |