OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // This file contains utility functions for dealing with the local | 5 // This file contains utility functions for dealing with the local |
6 // filesystem. | 6 // filesystem. |
7 | 7 |
8 #ifndef BASE_FILE_UTIL_H_ | 8 #ifndef BASE_FILE_UTIL_H_ |
9 #define BASE_FILE_UTIL_H_ | 9 #define BASE_FILE_UTIL_H_ |
10 | 10 |
11 #include "build/build_config.h" | 11 #include "build/build_config.h" |
12 | 12 |
13 #if defined(OS_WIN) | 13 #if defined(OS_WIN) |
14 #include <windows.h> | 14 #include <windows.h> |
15 #elif defined(OS_POSIX) | 15 #elif defined(OS_POSIX) |
16 #include <fts.h> | 16 #include <fts.h> |
| 17 #include <sys/stat.h> |
17 #endif | 18 #endif |
18 | 19 |
19 #include <stdio.h> | 20 #include <stdio.h> |
20 | 21 |
21 #include <stack> | 22 #include <stack> |
22 #include <string> | 23 #include <string> |
23 #include <vector> | 24 #include <vector> |
24 | 25 |
25 #include "base/basictypes.h" | 26 #include "base/basictypes.h" |
26 | 27 |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 // Deprecated temporary compatibility function. | 317 // Deprecated temporary compatibility function. |
317 bool SetCurrentDirectory(const std::wstring& current_directory); | 318 bool SetCurrentDirectory(const std::wstring& current_directory); |
318 | 319 |
319 // A class for enumerating the files in a provided path. The order of the | 320 // A class for enumerating the files in a provided path. The order of the |
320 // results is not guaranteed. | 321 // results is not guaranteed. |
321 // | 322 // |
322 // DO NOT USE FROM THE MAIN THREAD of your application unless it is a test | 323 // DO NOT USE FROM THE MAIN THREAD of your application unless it is a test |
323 // program where latency does not matter. This class is blocking. | 324 // program where latency does not matter. This class is blocking. |
324 class FileEnumerator { | 325 class FileEnumerator { |
325 public: | 326 public: |
| 327 #if defined(OS_WIN) |
| 328 typedef WIN32_FIND_DATA FindInfo; |
| 329 #elif defined(OS_POSIX) |
| 330 typedef struct { |
| 331 struct stat stat; |
| 332 std::string filename; |
| 333 } FindInfo; |
| 334 #endif |
| 335 |
326 enum FILE_TYPE { | 336 enum FILE_TYPE { |
327 FILES = 0x1, | 337 FILES = 0x1, |
328 DIRECTORIES = 0x2, | 338 DIRECTORIES = 0x2, |
329 FILES_AND_DIRECTORIES = 0x3 | 339 FILES_AND_DIRECTORIES = 0x3 |
330 }; | 340 }; |
331 | 341 |
332 // |root_path| is the starting directory to search for. It may or may not end | 342 // |root_path| is the starting directory to search for. It may or may not end |
333 // in a slash. | 343 // in a slash. |
334 // | 344 // |
335 // If |recursive| is true, this will enumerate all matches in any | 345 // If |recursive| is true, this will enumerate all matches in any |
(...skipping 18 matching lines...) Expand all Loading... |
354 FileEnumerator::FILE_TYPE file_type); | 364 FileEnumerator::FILE_TYPE file_type); |
355 FileEnumerator(const std::wstring& root_path, | 365 FileEnumerator(const std::wstring& root_path, |
356 bool recursive, | 366 bool recursive, |
357 FileEnumerator::FILE_TYPE file_type, | 367 FileEnumerator::FILE_TYPE file_type, |
358 const std::wstring& pattern); | 368 const std::wstring& pattern); |
359 ~FileEnumerator(); | 369 ~FileEnumerator(); |
360 | 370 |
361 // Returns an empty string if there are no more results. | 371 // Returns an empty string if there are no more results. |
362 std::wstring Next(); | 372 std::wstring Next(); |
363 | 373 |
| 374 // Write the file info into |info|. |
| 375 void GetFindInfo(FindInfo* info); |
| 376 |
364 private: | 377 private: |
365 std::wstring root_path_; | 378 std::wstring root_path_; |
366 bool recursive_; | 379 bool recursive_; |
367 FILE_TYPE file_type_; | 380 FILE_TYPE file_type_; |
368 std::wstring pattern_; // Empty when we want to find everything. | 381 std::wstring pattern_; // Empty when we want to find everything. |
369 | 382 |
370 // Set to true when there is a find operation open. This way, we can lazily | 383 // Set to true when there is a find operation open. This way, we can lazily |
371 // start the operations when the caller calls Next(). | 384 // start the operations when the caller calls Next(). |
372 bool is_in_find_op_; | 385 bool is_in_find_op_; |
373 | 386 |
374 // A stack that keeps track of which subdirectories we still need to | 387 // A stack that keeps track of which subdirectories we still need to |
375 // enumerate in the breadth-first search. | 388 // enumerate in the breadth-first search. |
376 std::stack<std::wstring> pending_paths_; | 389 std::stack<std::wstring> pending_paths_; |
377 | 390 |
378 #if defined(OS_WIN) | 391 #if defined(OS_WIN) |
379 WIN32_FIND_DATA find_data_; | 392 WIN32_FIND_DATA find_data_; |
380 HANDLE find_handle_; | 393 HANDLE find_handle_; |
381 #elif defined(OS_POSIX) | 394 #elif defined(OS_POSIX) |
382 FTS* fts_; | 395 FTS* fts_; |
| 396 FTSENT* fts_ent_; |
383 #endif | 397 #endif |
384 | 398 |
385 DISALLOW_EVIL_CONSTRUCTORS(FileEnumerator); | 399 DISALLOW_EVIL_CONSTRUCTORS(FileEnumerator); |
386 }; | 400 }; |
387 | 401 |
388 // Renames a file using the SHFileOperation API to ensure that the target file | 402 // Renames a file using the SHFileOperation API to ensure that the target file |
389 // gets the correct default security descriptor in the new path. | 403 // gets the correct default security descriptor in the new path. |
390 bool RenameFileAndResetSecurityDescriptor( | 404 bool RenameFileAndResetSecurityDescriptor( |
391 const std::wstring& source_file_path, | 405 const std::wstring& source_file_path, |
392 const std::wstring& target_file_path); | 406 const std::wstring& target_file_path); |
393 | 407 |
394 } // namespace file_util | 408 } // namespace file_util |
395 | 409 |
396 #endif // BASE_FILE_UTIL_H_ | 410 #endif // BASE_FILE_UTIL_H_ |
OLD | NEW |