| 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 // Keep the order as in fts(3): fts.h requires types defined in sys/types.h | |
| 17 #include <sys/types.h> | |
| 18 #include <sys/stat.h> | 16 #include <sys/stat.h> |
| 19 #include <fts.h> | |
| 20 #endif | 17 #endif |
| 21 | 18 |
| 22 #include <stdio.h> | 19 #include <stdio.h> |
| 23 | 20 |
| 24 #include <stack> | 21 #include <stack> |
| 25 #include <string> | 22 #include <string> |
| 26 #include <vector> | 23 #include <vector> |
| 27 | 24 |
| 28 #include "base/basictypes.h" | 25 #include "base/basictypes.h" |
| 29 #include "base/file_path.h" | 26 #include "base/file_path.h" |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 typedef struct { | 411 typedef struct { |
| 415 struct stat stat; | 412 struct stat stat; |
| 416 std::string filename; | 413 std::string filename; |
| 417 } FindInfo; | 414 } FindInfo; |
| 418 #endif | 415 #endif |
| 419 | 416 |
| 420 enum FILE_TYPE { | 417 enum FILE_TYPE { |
| 421 FILES = 1 << 0, | 418 FILES = 1 << 0, |
| 422 DIRECTORIES = 1 << 1, | 419 DIRECTORIES = 1 << 1, |
| 423 INCLUDE_DOT_DOT = 1 << 2, | 420 INCLUDE_DOT_DOT = 1 << 2, |
| 421 #if defined(OS_POSIX) |
| 422 SHOW_SYM_LINKS = 1 << 4, |
| 423 #endif |
| 424 }; | 424 }; |
| 425 | 425 |
| 426 // |root_path| is the starting directory to search for. It may or may not end | 426 // |root_path| is the starting directory to search for. It may or may not end |
| 427 // in a slash. | 427 // in a slash. |
| 428 // | 428 // |
| 429 // If |recursive| is true, this will enumerate all matches in any | 429 // If |recursive| is true, this will enumerate all matches in any |
| 430 // subdirectories matched as well. It does a breadth-first search, so all | 430 // subdirectories matched as well. It does a breadth-first search, so all |
| 431 // files in one directory will be returned before any files in a | 431 // files in one directory will be returned before any files in a |
| 432 // subdirectory. | 432 // subdirectory. |
| 433 // | 433 // |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 // Returns true if the given path's base name is ".". | 478 // Returns true if the given path's base name is ".". |
| 479 bool IsDot(const FilePath& path); | 479 bool IsDot(const FilePath& path); |
| 480 | 480 |
| 481 // Returns true if the given path's base name is "..". | 481 // Returns true if the given path's base name is "..". |
| 482 bool IsDotDot(const FilePath& path); | 482 bool IsDotDot(const FilePath& path); |
| 483 | 483 |
| 484 #if defined(OS_WIN) | 484 #if defined(OS_WIN) |
| 485 WIN32_FIND_DATA find_data_; | 485 WIN32_FIND_DATA find_data_; |
| 486 HANDLE find_handle_; | 486 HANDLE find_handle_; |
| 487 #elif defined(OS_POSIX) | 487 #elif defined(OS_POSIX) |
| 488 FTS* fts_; | 488 typedef struct { |
| 489 FTSENT* fts_ent_; | 489 FilePath filename; |
| 490 struct stat stat; |
| 491 } DirectoryEntryInfo; |
| 492 |
| 493 // Read the filenames in source into the vector of DirectoryEntryInfo's |
| 494 static bool ReadDirectory(std::vector<DirectoryEntryInfo>* entries, |
| 495 const FilePath& source, bool show_links); |
| 496 |
| 497 // Comparison function to neatly sort directory entries |
| 498 static bool CompareFiles(const DirectoryEntryInfo& a, |
| 499 const DirectoryEntryInfo& b); |
| 500 |
| 501 // The files in the current directory |
| 502 std::vector<DirectoryEntryInfo> directory_entries_; |
| 503 |
| 504 // The next entry to use from the directory_entries_ vector |
| 505 size_t current_directory_entry_; |
| 490 #endif | 506 #endif |
| 491 | 507 |
| 492 DISALLOW_EVIL_CONSTRUCTORS(FileEnumerator); | 508 DISALLOW_EVIL_CONSTRUCTORS(FileEnumerator); |
| 493 }; | 509 }; |
| 494 | 510 |
| 495 class MemoryMappedFile { | 511 class MemoryMappedFile { |
| 496 public: | 512 public: |
| 497 // The default constructor sets all members to invalid/null values. | 513 // The default constructor sets all members to invalid/null values. |
| 498 MemoryMappedFile(); | 514 MemoryMappedFile(); |
| 499 ~MemoryMappedFile(); | 515 ~MemoryMappedFile(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 | 550 |
| 535 // Renames a file using the SHFileOperation API to ensure that the target file | 551 // Renames a file using the SHFileOperation API to ensure that the target file |
| 536 // gets the correct default security descriptor in the new path. | 552 // gets the correct default security descriptor in the new path. |
| 537 bool RenameFileAndResetSecurityDescriptor( | 553 bool RenameFileAndResetSecurityDescriptor( |
| 538 const FilePath& source_file_path, | 554 const FilePath& source_file_path, |
| 539 const FilePath& target_file_path); | 555 const FilePath& target_file_path); |
| 540 | 556 |
| 541 } // namespace file_util | 557 } // namespace file_util |
| 542 | 558 |
| 543 #endif // BASE_FILE_UTIL_H_ | 559 #endif // BASE_FILE_UTIL_H_ |
| OLD | NEW |