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

Side by Side Diff: webrtc/base/fileutils.h

Issue 2445733002: Delete unused features of rtc::FilesystemInterface. (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « no previous file | webrtc/base/fileutils.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 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // Advances to the next file 56 // Advances to the next file
57 // returns true if there were more files in the directory. 57 // returns true if there were more files in the directory.
58 virtual bool Next(); 58 virtual bool Next();
59 59
60 // returns true if the file currently pointed to is a directory 60 // returns true if the file currently pointed to is a directory
61 virtual bool IsDirectory() const; 61 virtual bool IsDirectory() const;
62 62
63 // returns the name of the file currently pointed to 63 // returns the name of the file currently pointed to
64 virtual std::string Name() const; 64 virtual std::string Name() const;
65 65
66 // returns the size of the file currently pointed to
67 virtual size_t FileSize() const;
68
69 // returns true if the file is older than seconds
70 virtual bool OlderThan(int seconds) const;
71
72 // checks whether current file is a special directory file "." or ".."
73 bool IsDots() const {
74 std::string filename(Name());
75 return (filename.compare(".") == 0) || (filename.compare("..") == 0);
76 }
77
78 private: 66 private:
79 std::string directory_; 67 std::string directory_;
80 #if defined(WEBRTC_WIN) 68 #if defined(WEBRTC_WIN)
81 WIN32_FIND_DATA data_; 69 WIN32_FIND_DATA data_;
82 HANDLE handle_; 70 HANDLE handle_;
83 #else 71 #else
84 DIR *dir_; 72 DIR *dir_;
85 struct dirent *dirent_; 73 struct dirent *dirent_;
86 struct stat stat_; 74 struct stat stat_;
87 #endif 75 #endif
88 }; 76 };
89 77
90 enum FileTimeType { FTT_CREATED, FTT_MODIFIED, FTT_ACCESSED }; 78 enum FileTimeType { FTT_CREATED, FTT_MODIFIED, FTT_ACCESSED };
91 79
92 class FilesystemInterface { 80 class FilesystemInterface {
93 public: 81 public:
94 virtual ~FilesystemInterface() {} 82 virtual ~FilesystemInterface() {}
95 83
96 // Returns a DirectoryIterator for a given pathname. 84 // Returns a DirectoryIterator for a given pathname.
97 // TODO: Do fancy abstracted stuff 85 // TODO: Do fancy abstracted stuff
98 virtual DirectoryIterator* IterateDirectory(); 86 virtual DirectoryIterator* IterateDirectory();
99 87
100 // Opens a file. Returns an open StreamInterface if function succeeds. 88 // Opens a file. Returns an open StreamInterface if function succeeds.
101 // Otherwise, returns NULL. 89 // Otherwise, returns NULL.
102 // TODO: Add an error param to indicate failure reason, similar to 90 // TODO: Add an error param to indicate failure reason, similar to
103 // FileStream::Open 91 // FileStream::Open
104 virtual FileStream *OpenFile(const Pathname &filename, 92 virtual FileStream *OpenFile(const Pathname &filename,
105 const std::string &mode) = 0; 93 const std::string &mode) = 0;
106 94
107 // Atomically creates an empty file accessible only to the current user if one
108 // does not already exist at the given path, otherwise fails. This is the only
109 // secure way to create a file in a shared temp directory (e.g., C:\Temp on
110 // Windows or /tmp on Linux).
111 // Note that if it is essential that a file be successfully created then the
112 // app must generate random names and retry on failure, or else it will be
113 // vulnerable to a trivial DoS.
114 virtual bool CreatePrivateFile(const Pathname &filename) = 0;
115
116 // This will attempt to delete the path located at filename. 95 // This will attempt to delete the path located at filename.
117 // It ASSERTS and returns false if the path points to a folder or a 96 // It ASSERTS and returns false if the path points to a folder or a
118 // non-existent file. 97 // non-existent file.
119 virtual bool DeleteFile(const Pathname &filename) = 0; 98 virtual bool DeleteFile(const Pathname &filename) = 0;
120 99
121 // This will attempt to delete the empty folder located at 'folder' 100 // This will attempt to delete the empty folder located at 'folder'
122 // It ASSERTS and returns false if the path points to a file or a non-existent 101 // It ASSERTS and returns false if the path points to a file or a non-existent
123 // folder. It fails normally if the folder is not empty or can otherwise 102 // folder. It fails normally if the folder is not empty or can otherwise
124 // not be deleted. 103 // not be deleted.
125 virtual bool DeleteEmptyFolder(const Pathname &folder) = 0; 104 virtual bool DeleteEmptyFolder(const Pathname &folder) = 0;
126 105
127 // This will call IterateDirectory, to get a directory iterator, and then 106 // This will call IterateDirectory, to get a directory iterator, and then
128 // call DeleteFolderAndContents and DeleteFile on every path contained in this 107 // call DeleteFolderAndContents and DeleteFile on every path contained in this
129 // folder. If the folder is empty, this returns true. 108 // folder. If the folder is empty, this returns true.
130 virtual bool DeleteFolderContents(const Pathname &folder); 109 virtual bool DeleteFolderContents(const Pathname &folder);
131 110
132 // This deletes the contents of a folder, recursively, and then deletes 111 // This deletes the contents of a folder, recursively, and then deletes
133 // the folder itself. 112 // the folder itself.
134 virtual bool DeleteFolderAndContents(const Pathname& folder); 113 virtual bool DeleteFolderAndContents(const Pathname& folder);
135 114
136 // This will delete whatever is located at path, be it a file or a folder.
137 // If it is a folder, it will delete it recursively by calling
138 // DeleteFolderAndContents
139 bool DeleteFileOrFolder(const Pathname &path) {
140 if (IsFolder(path))
141 return DeleteFolderAndContents(path);
142 else
143 return DeleteFile(path);
144 }
145
146 // Creates a directory. This will call itself recursively to create /foo/bar 115 // Creates a directory. This will call itself recursively to create /foo/bar
147 // even if /foo does not exist. Returns true if the function succeeds. 116 // even if /foo does not exist. Returns true if the function succeeds.
148 virtual bool CreateFolder(const Pathname &pathname) = 0; 117 virtual bool CreateFolder(const Pathname &pathname) = 0;
149 118
150 // This moves a file from old_path to new_path, where "old_path" is a 119 // This moves a file from old_path to new_path, where "old_path" is a
151 // plain file. This ASSERTs and returns false if old_path points to a 120 // plain file. This ASSERTs and returns false if old_path points to a
152 // directory, and returns true if the function succeeds. 121 // directory, and returns true if the function succeeds.
153 // If the new path is on a different volume than the old path, this function 122 // If the new path is on a different volume than the old path, this function
154 // will attempt to copy and, if that succeeds, delete the old path. 123 // will attempt to copy and, if that succeeds, delete the old path.
155 virtual bool MoveFolder(const Pathname &old_path,
156 const Pathname &new_path) = 0;
157
158 // This moves a directory from old_path to new_path, where "old_path" is a
159 // directory. This ASSERTs and returns false if old_path points to a plain
160 // file, and returns true if the function succeeds.
161 // If the new path is on a different volume, this function will attempt to
162 // copy and if that succeeds, delete the old path.
163 virtual bool MoveFile(const Pathname &old_path, const Pathname &new_path) = 0; 124 virtual bool MoveFile(const Pathname &old_path, const Pathname &new_path) = 0;
164 125
165 // This attempts to move whatever is located at old_path to new_path,
166 // be it a file or folder.
167 bool MoveFileOrFolder(const Pathname &old_path, const Pathname &new_path) {
168 if (IsFile(old_path)) {
169 return MoveFile(old_path, new_path);
170 } else {
171 return MoveFolder(old_path, new_path);
172 }
173 }
174
175 // This copies a file from old_path to new_path. This method ASSERTs and 126 // This copies a file from old_path to new_path. This method ASSERTs and
176 // returns false if old_path is a folder, and returns true if the copy 127 // returns false if old_path is a folder, and returns true if the copy
177 // succeeds. 128 // succeeds.
178 virtual bool CopyFile(const Pathname &old_path, const Pathname &new_path) = 0; 129 virtual bool CopyFile(const Pathname &old_path, const Pathname &new_path) = 0;
179 130
180 // This copies a folder from old_path to new_path.
181 bool CopyFolder(const Pathname &old_path, const Pathname &new_path);
182
183 bool CopyFileOrFolder(const Pathname &old_path, const Pathname &new_path) {
184 if (IsFile(old_path))
185 return CopyFile(old_path, new_path);
186 else
187 return CopyFolder(old_path, new_path);
188 }
189
190 // Returns true if pathname refers to a directory 131 // Returns true if pathname refers to a directory
191 virtual bool IsFolder(const Pathname& pathname) = 0; 132 virtual bool IsFolder(const Pathname& pathname) = 0;
192 133
193 // Returns true if pathname refers to a file 134 // Returns true if pathname refers to a file
194 virtual bool IsFile(const Pathname& pathname) = 0; 135 virtual bool IsFile(const Pathname& pathname) = 0;
195 136
196 // Returns true if pathname refers to no filesystem object, every parent 137 // Returns true if pathname refers to no filesystem object, every parent
197 // directory either exists, or is also absent. 138 // directory either exists, or is also absent.
198 virtual bool IsAbsent(const Pathname& pathname) = 0; 139 virtual bool IsAbsent(const Pathname& pathname) = 0;
199 140
200 // Returns true if pathname represents a temporary location on the system. 141 // Returns true if pathname represents a temporary location on the system.
201 virtual bool IsTemporaryPath(const Pathname& pathname) = 0; 142 virtual bool IsTemporaryPath(const Pathname& pathname) = 0;
202 143
203 // A folder appropriate for storing temporary files (Contents are 144 // A folder appropriate for storing temporary files (Contents are
204 // automatically deleted when the program exits) 145 // automatically deleted when the program exits)
205 virtual bool GetTemporaryFolder(Pathname &path, bool create, 146 virtual bool GetTemporaryFolder(Pathname &path, bool create,
206 const std::string *append) = 0; 147 const std::string *append) = 0;
207 148
208 virtual std::string TempFilename(const Pathname &dir, 149 virtual std::string TempFilename(const Pathname &dir,
209 const std::string &prefix) = 0; 150 const std::string &prefix) = 0;
210 151
211 // Determines the size of the file indicated by path. 152 // Determines the size of the file indicated by path.
212 virtual bool GetFileSize(const Pathname& path, size_t* size) = 0; 153 virtual bool GetFileSize(const Pathname& path, size_t* size) = 0;
213 154
214 // Determines a timestamp associated with the file indicated by path. 155 // Determines a timestamp associated with the file indicated by path.
215 virtual bool GetFileTime(const Pathname& path, FileTimeType which, 156 virtual bool GetFileTime(const Pathname& path, FileTimeType which,
216 time_t* time) = 0; 157 time_t* time) = 0;
217 158
218 // Returns the path to the running application.
219 // Note: This is not guaranteed to work on all platforms. Be aware of the
220 // limitations before using it, and robustly handle failure.
221 virtual bool GetAppPathname(Pathname* path) = 0;
222
223 // Get a folder that is unique to the current application, which is suitable 159 // Get a folder that is unique to the current application, which is suitable
224 // for sharing data between executions of the app. If the per_user arg is 160 // for sharing data between executions of the app. If the per_user arg is
225 // true, the folder is also specific to the current user. 161 // true, the folder is also specific to the current user.
226 virtual bool GetAppDataFolder(Pathname* path, bool per_user) = 0; 162 virtual bool GetAppDataFolder(Pathname* path, bool per_user) = 0;
227 163
228 // Get a temporary folder that is unique to the current user and application. 164 // Get a temporary folder that is unique to the current user and application.
229 // TODO: Re-evaluate the goals of this function. We probably just need any 165 // TODO: Re-evaluate the goals of this function. We probably just need any
230 // directory that won't collide with another existing directory, and which 166 // directory that won't collide with another existing directory, and which
231 // will be cleaned up when the program exits. 167 // will be cleaned up when the program exits.
232 virtual bool GetAppTempFolder(Pathname* path) = 0; 168 virtual bool GetAppTempFolder(Pathname* path) = 0;
233 169
234 // Delete the contents of the folder returned by GetAppTempFolder
235 bool CleanAppTempFolder();
236
237 virtual bool GetDiskFreeSpace(const Pathname& path, int64_t* freebytes) = 0; 170 virtual bool GetDiskFreeSpace(const Pathname& path, int64_t* freebytes) = 0;
238 171
239 // Returns the absolute path of the current directory.
240 virtual Pathname GetCurrentDirectory() = 0;
241
242 // Note: These might go into some shared config section later, but they're 172 // Note: These might go into some shared config section later, but they're
243 // used by some methods in this interface, so we're leaving them here for now. 173 // used by some methods in this interface, so we're leaving them here for now.
244 void SetOrganizationName(const std::string& organization) { 174 void SetOrganizationName(const std::string& organization) {
245 organization_name_ = organization; 175 organization_name_ = organization;
246 } 176 }
247 void GetOrganizationName(std::string* organization) { 177 void GetOrganizationName(std::string* organization) {
248 ASSERT(NULL != organization); 178 ASSERT(NULL != organization);
249 *organization = organization_name_; 179 *organization = organization_name_;
250 } 180 }
251 void SetApplicationName(const std::string& application) { 181 void SetApplicationName(const std::string& application) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 215
286 static bool CreateFolder(const Pathname &pathname) { 216 static bool CreateFolder(const Pathname &pathname) {
287 return EnsureDefaultFilesystem()->CreateFolder(pathname); 217 return EnsureDefaultFilesystem()->CreateFolder(pathname);
288 } 218 }
289 219
290 static FileStream *OpenFile(const Pathname &filename, 220 static FileStream *OpenFile(const Pathname &filename,
291 const std::string &mode) { 221 const std::string &mode) {
292 return EnsureDefaultFilesystem()->OpenFile(filename, mode); 222 return EnsureDefaultFilesystem()->OpenFile(filename, mode);
293 } 223 }
294 224
295 static bool CreatePrivateFile(const Pathname &filename) {
296 return EnsureDefaultFilesystem()->CreatePrivateFile(filename);
297 }
298
299 static bool DeleteFile(const Pathname &filename) { 225 static bool DeleteFile(const Pathname &filename) {
300 return EnsureDefaultFilesystem()->DeleteFile(filename); 226 return EnsureDefaultFilesystem()->DeleteFile(filename);
301 } 227 }
302 228
303 static bool DeleteEmptyFolder(const Pathname &folder) {
304 return EnsureDefaultFilesystem()->DeleteEmptyFolder(folder);
305 }
306
307 static bool DeleteFolderContents(const Pathname &folder) { 229 static bool DeleteFolderContents(const Pathname &folder) {
308 return EnsureDefaultFilesystem()->DeleteFolderContents(folder); 230 return EnsureDefaultFilesystem()->DeleteFolderContents(folder);
309 } 231 }
310 232
311 static bool DeleteFolderAndContents(const Pathname &folder) { 233 static bool DeleteFolderAndContents(const Pathname &folder) {
312 return EnsureDefaultFilesystem()->DeleteFolderAndContents(folder); 234 return EnsureDefaultFilesystem()->DeleteFolderAndContents(folder);
313 } 235 }
314 236
315 static bool MoveFolder(const Pathname &old_path, const Pathname &new_path) {
316 return EnsureDefaultFilesystem()->MoveFolder(old_path, new_path);
317 }
318
319 static bool MoveFile(const Pathname &old_path, const Pathname &new_path) { 237 static bool MoveFile(const Pathname &old_path, const Pathname &new_path) {
320 return EnsureDefaultFilesystem()->MoveFile(old_path, new_path); 238 return EnsureDefaultFilesystem()->MoveFile(old_path, new_path);
321 } 239 }
322 240
323 static bool CopyFolder(const Pathname &old_path, const Pathname &new_path) {
324 return EnsureDefaultFilesystem()->CopyFolder(old_path, new_path);
325 }
326
327 static bool CopyFile(const Pathname &old_path, const Pathname &new_path) { 241 static bool CopyFile(const Pathname &old_path, const Pathname &new_path) {
328 return EnsureDefaultFilesystem()->CopyFile(old_path, new_path); 242 return EnsureDefaultFilesystem()->CopyFile(old_path, new_path);
329 } 243 }
330 244
331 static bool IsFolder(const Pathname& pathname) { 245 static bool IsFolder(const Pathname& pathname) {
332 return EnsureDefaultFilesystem()->IsFolder(pathname); 246 return EnsureDefaultFilesystem()->IsFolder(pathname);
333 } 247 }
334 248
335 static bool IsFile(const Pathname &pathname) { 249 static bool IsFile(const Pathname &pathname) {
336 return EnsureDefaultFilesystem()->IsFile(pathname); 250 return EnsureDefaultFilesystem()->IsFile(pathname);
(...skipping 19 matching lines...) Expand all
356 270
357 static bool GetFileSize(const Pathname& path, size_t* size) { 271 static bool GetFileSize(const Pathname& path, size_t* size) {
358 return EnsureDefaultFilesystem()->GetFileSize(path, size); 272 return EnsureDefaultFilesystem()->GetFileSize(path, size);
359 } 273 }
360 274
361 static bool GetFileTime(const Pathname& path, FileTimeType which, 275 static bool GetFileTime(const Pathname& path, FileTimeType which,
362 time_t* time) { 276 time_t* time) {
363 return EnsureDefaultFilesystem()->GetFileTime(path, which, time); 277 return EnsureDefaultFilesystem()->GetFileTime(path, which, time);
364 } 278 }
365 279
366 static bool GetAppPathname(Pathname* path) {
367 return EnsureDefaultFilesystem()->GetAppPathname(path);
368 }
369
370 static bool GetAppDataFolder(Pathname* path, bool per_user) { 280 static bool GetAppDataFolder(Pathname* path, bool per_user) {
371 return EnsureDefaultFilesystem()->GetAppDataFolder(path, per_user); 281 return EnsureDefaultFilesystem()->GetAppDataFolder(path, per_user);
372 } 282 }
373 283
374 static bool GetAppTempFolder(Pathname* path) { 284 static bool GetAppTempFolder(Pathname* path) {
375 return EnsureDefaultFilesystem()->GetAppTempFolder(path); 285 return EnsureDefaultFilesystem()->GetAppTempFolder(path);
376 } 286 }
377 287
378 static bool CleanAppTempFolder() {
379 return EnsureDefaultFilesystem()->CleanAppTempFolder();
380 }
381
382 static bool GetDiskFreeSpace(const Pathname& path, int64_t* freebytes) { 288 static bool GetDiskFreeSpace(const Pathname& path, int64_t* freebytes) {
383 return EnsureDefaultFilesystem()->GetDiskFreeSpace(path, freebytes); 289 return EnsureDefaultFilesystem()->GetDiskFreeSpace(path, freebytes);
384 } 290 }
385 291
386 // Definition has to be in the .cc file due to returning forward-declared
387 // Pathname by value.
388 static Pathname GetCurrentDirectory();
389
390 static void SetOrganizationName(const std::string& organization) { 292 static void SetOrganizationName(const std::string& organization) {
391 EnsureDefaultFilesystem()->SetOrganizationName(organization); 293 EnsureDefaultFilesystem()->SetOrganizationName(organization);
392 } 294 }
393 295
394 static void GetOrganizationName(std::string* organization) { 296 static void GetOrganizationName(std::string* organization) {
395 EnsureDefaultFilesystem()->GetOrganizationName(organization); 297 EnsureDefaultFilesystem()->GetOrganizationName(organization);
396 } 298 }
397 299
398 static void SetApplicationName(const std::string& application) { 300 static void SetApplicationName(const std::string& application) {
399 EnsureDefaultFilesystem()->SetApplicationName(application); 301 EnsureDefaultFilesystem()->SetApplicationName(application);
(...skipping 16 matching lines...) Expand all
416 old_fs_ = Filesystem::swap_default_filesystem(new_fs); 318 old_fs_ = Filesystem::swap_default_filesystem(new_fs);
417 } 319 }
418 ~FilesystemScope() { 320 ~FilesystemScope() {
419 Filesystem::set_default_filesystem(old_fs_); 321 Filesystem::set_default_filesystem(old_fs_);
420 } 322 }
421 private: 323 private:
422 FilesystemInterface* old_fs_; 324 FilesystemInterface* old_fs_;
423 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(FilesystemScope); 325 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(FilesystemScope);
424 }; 326 };
425 327
426 // Generates a unique filename based on the input path. If no path component
427 // is specified, it uses the temporary directory. If a filename is provided,
428 // up to 100 variations of form basename-N.extension are tried. When
429 // create_empty is true, an empty file of this name is created (which
430 // decreases the chance of a temporary filename collision with another
431 // process).
432 bool CreateUniqueFile(Pathname& path, bool create_empty);
433
434 } // namespace rtc 328 } // namespace rtc
435 329
436 #endif // WEBRTC_BASE_FILEUTILS_H_ 330 #endif // WEBRTC_BASE_FILEUTILS_H_
OLDNEW
« no previous file with comments | « no previous file | webrtc/base/fileutils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698