Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(612)

Side by Side Diff: base/file_util_posix.cc

Issue 16950028: Move file_util::Delete to the base namespace (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/file_util.h ('k') | base/file_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 #endif 51 #endif
52 52
53 #if !defined(OS_IOS) 53 #if !defined(OS_IOS)
54 #include <grp.h> 54 #include <grp.h>
55 #endif 55 #endif
56 56
57 #if defined(OS_CHROMEOS) 57 #if defined(OS_CHROMEOS)
58 #include "base/chromeos/chromeos_version.h" 58 #include "base/chromeos/chromeos_version.h"
59 #endif 59 #endif
60 60
61 using base::FileEnumerator;
62 using base::FilePath;
63 using base::MakeAbsoluteFilePath;
64
65 namespace base { 61 namespace base {
66 62
67 FilePath MakeAbsoluteFilePath(const FilePath& input) {
68 base::ThreadRestrictions::AssertIOAllowed();
69 char full_path[PATH_MAX];
70 if (realpath(input.value().c_str(), full_path) == NULL)
71 return FilePath();
72 return FilePath(full_path);
73 }
74
75 } // namespace base
76
77 namespace file_util {
78
79 namespace { 63 namespace {
80 64
81 #if defined(OS_BSD) || defined(OS_MACOSX) 65 #if defined(OS_BSD) || defined(OS_MACOSX)
82 typedef struct stat stat_wrapper_t; 66 typedef struct stat stat_wrapper_t;
83 static int CallStat(const char *path, stat_wrapper_t *sb) { 67 static int CallStat(const char *path, stat_wrapper_t *sb) {
84 base::ThreadRestrictions::AssertIOAllowed(); 68 base::ThreadRestrictions::AssertIOAllowed();
85 return stat(path, sb); 69 return stat(path, sb);
86 } 70 }
87 static int CallLstat(const char *path, stat_wrapper_t *sb) { 71 static int CallLstat(const char *path, stat_wrapper_t *sb) {
88 base::ThreadRestrictions::AssertIOAllowed(); 72 base::ThreadRestrictions::AssertIOAllowed();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 DLOG(ERROR) << "Path " << path.value() 129 DLOG(ERROR) << "Path " << path.value()
146 << " is writable by any user."; 130 << " is writable by any user.";
147 return false; 131 return false;
148 } 132 }
149 133
150 return true; 134 return true;
151 } 135 }
152 136
153 } // namespace 137 } // namespace
154 138
155 static std::string TempFileName() { 139 FilePath MakeAbsoluteFilePath(const FilePath& input) {
156 #if defined(OS_MACOSX) 140 ThreadRestrictions::AssertIOAllowed();
157 return base::StringPrintf(".%s.XXXXXX", base::mac::BaseBundleID()); 141 char full_path[PATH_MAX];
158 #endif 142 if (realpath(input.value().c_str(), full_path) == NULL)
159 143 return FilePath();
160 #if defined(GOOGLE_CHROME_BUILD) 144 return FilePath(full_path);
161 return std::string(".com.google.Chrome.XXXXXX");
162 #else
163 return std::string(".org.chromium.Chromium.XXXXXX");
164 #endif
165 } 145 }
166 146
167 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*" 147 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*"
168 // which works both with and without the recursive flag. I'm not sure we need 148 // which works both with and without the recursive flag. I'm not sure we need
169 // that functionality. If not, remove from file_util_win.cc, otherwise add it 149 // that functionality. If not, remove from file_util_win.cc, otherwise add it
170 // here. 150 // here.
171 bool Delete(const FilePath& path, bool recursive) { 151 bool Delete(const FilePath& path, bool recursive) {
172 base::ThreadRestrictions::AssertIOAllowed(); 152 ThreadRestrictions::AssertIOAllowed();
173 const char* path_str = path.value().c_str(); 153 const char* path_str = path.value().c_str();
174 stat_wrapper_t file_info; 154 stat_wrapper_t file_info;
175 int test = CallLstat(path_str, &file_info); 155 int test = CallLstat(path_str, &file_info);
176 if (test != 0) { 156 if (test != 0) {
177 // The Windows version defines this condition as success. 157 // The Windows version defines this condition as success.
178 bool ret = (errno == ENOENT || errno == ENOTDIR); 158 bool ret = (errno == ENOENT || errno == ENOTDIR);
179 return ret; 159 return ret;
180 } 160 }
181 if (!S_ISDIR(file_info.st_mode)) 161 if (!S_ISDIR(file_info.st_mode))
182 return (unlink(path_str) == 0); 162 return (unlink(path_str) == 0);
(...skipping 15 matching lines...) Expand all
198 } 178 }
199 179
200 while (success && !directories.empty()) { 180 while (success && !directories.empty()) {
201 FilePath dir = FilePath(directories.top()); 181 FilePath dir = FilePath(directories.top());
202 directories.pop(); 182 directories.pop();
203 success = (rmdir(dir.value().c_str()) == 0); 183 success = (rmdir(dir.value().c_str()) == 0);
204 } 184 }
205 return success; 185 return success;
206 } 186 }
207 187
188 } // namespace base
189
190 // -----------------------------------------------------------------------------
191
192 namespace file_util {
193
194 using base::stat_wrapper_t;
195 using base::CallStat;
196 using base::CallLstat;
197 using base::FileEnumerator;
198 using base::FilePath;
199 using base::MakeAbsoluteFilePath;
200 using base::RealPath;
201 using base::VerifySpecificPathControlledByUser;
202
203 static std::string TempFileName() {
204 #if defined(OS_MACOSX)
205 return base::StringPrintf(".%s.XXXXXX", base::mac::BaseBundleID());
206 #endif
207
208 #if defined(GOOGLE_CHROME_BUILD)
209 return std::string(".com.google.Chrome.XXXXXX");
210 #else
211 return std::string(".org.chromium.Chromium.XXXXXX");
212 #endif
213 }
214
208 bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path) { 215 bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path) {
209 base::ThreadRestrictions::AssertIOAllowed(); 216 base::ThreadRestrictions::AssertIOAllowed();
210 // Windows compatibility: if to_path exists, from_path and to_path 217 // Windows compatibility: if to_path exists, from_path and to_path
211 // must be the same type, either both files, or both directories. 218 // must be the same type, either both files, or both directories.
212 stat_wrapper_t to_file_info; 219 stat_wrapper_t to_file_info;
213 if (CallStat(to_path.value().c_str(), &to_file_info) == 0) { 220 if (CallStat(to_path.value().c_str(), &to_file_info) == 0) {
214 stat_wrapper_t from_file_info; 221 stat_wrapper_t from_file_info;
215 if (CallStat(from_path.value().c_str(), &from_file_info) == 0) { 222 if (CallStat(from_path.value().c_str(), &from_file_info) == 0) {
216 if (S_ISDIR(to_file_info.st_mode) != S_ISDIR(from_file_info.st_mode)) 223 if (S_ISDIR(to_file_info.st_mode) != S_ISDIR(from_file_info.st_mode))
217 return false; 224 return false;
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 kFileSystemRoot, path, kRootUid, allowed_group_ids); 938 kFileSystemRoot, path, kRootUid, allowed_group_ids);
932 } 939 }
933 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 940 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
934 941
935 int GetMaximumPathComponentLength(const FilePath& path) { 942 int GetMaximumPathComponentLength(const FilePath& path) {
936 base::ThreadRestrictions::AssertIOAllowed(); 943 base::ThreadRestrictions::AssertIOAllowed();
937 return pathconf(path.value().c_str(), _PC_NAME_MAX); 944 return pathconf(path.value().c_str(), _PC_NAME_MAX);
938 } 945 }
939 946
940 } // namespace file_util 947 } // namespace file_util
OLDNEW
« no previous file with comments | « base/file_util.h ('k') | base/file_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698