diff options
-rw-r--r-- | clang/include/clang/Basic/FileManager.h | 4 | ||||
-rw-r--r-- | clang/lib/Basic/FileManager.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 19 |
3 files changed, 16 insertions, 13 deletions
diff --git a/clang/include/clang/Basic/FileManager.h b/clang/include/clang/Basic/FileManager.h index ebf9b497f74..99fa5fa1cd3 100644 --- a/clang/include/clang/Basic/FileManager.h +++ b/clang/include/clang/Basic/FileManager.h @@ -24,6 +24,7 @@ #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Allocator.h" +#include "llvm/Support/FileSystem.h" // FIXME: Enhance libsystem to support inode and other fields in stat. #include <sys/types.h> @@ -243,7 +244,8 @@ public: /// /// If the path is relative, it will be resolved against the WorkingDir of the /// FileManager's FileSystemOptions. - bool getNoncachedStatValue(StringRef Path, struct stat &StatBuf); + bool getNoncachedStatValue(StringRef Path, + llvm::sys::fs::file_status &Result); /// \brief Remove the real file \p Entry from the cache. void invalidateCache(const FileEntry *Entry); diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index 651a7a430a3..079b7fffb60 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -587,12 +587,12 @@ bool FileManager::getStatValue(const char *Path, struct stat &StatBuf, isFile, FileDescriptor, StatCache.get()); } -bool FileManager::getNoncachedStatValue(StringRef Path, - struct stat &StatBuf) { +bool FileManager::getNoncachedStatValue(StringRef Path, + llvm::sys::fs::file_status &Result) { SmallString<128> FilePath(Path); FixupRelativePath(FilePath); - return ::stat(FilePath.c_str(), &StatBuf) != 0; + return llvm::sys::fs::status(FilePath.c_str(), Result); } void FileManager::invalidateCache(const FileEntry *Entry) { diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 9251fc0daa0..909186118f1 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -1417,16 +1417,16 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( REnd = PreprocessorOpts.remapped_file_end(); !AnyFileChanged && R != REnd; ++R) { - struct stat StatBuf; - if (FileMgr->getNoncachedStatValue(R->second, StatBuf)) { + llvm::sys::fs::file_status Status; + if (FileMgr->getNoncachedStatValue(R->second, Status)) { // If we can't stat the file we're remapping to, assume that something // horrible happened. AnyFileChanged = true; break; } - - OverriddenFiles[R->first] = std::make_pair(StatBuf.st_size, - StatBuf.st_mtime); + + OverriddenFiles[R->first] = std::make_pair( + Status.getSize(), Status.getLastModificationTime().toEpochTime()); } for (PreprocessorOptions::remapped_file_buffer_iterator R = PreprocessorOpts.remapped_file_buffer_begin(), @@ -1455,12 +1455,13 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( } // The file was not remapped; check whether it has changed on disk. - struct stat StatBuf; - if (FileMgr->getNoncachedStatValue(F->first(), StatBuf)) { + llvm::sys::fs::file_status Status; + if (FileMgr->getNoncachedStatValue(F->first(), Status)) { // If we can't stat the file, assume that something horrible happened. AnyFileChanged = true; - } else if (StatBuf.st_size != F->second.first || - StatBuf.st_mtime != F->second.second) + } else if (Status.getSize() != uint64_t(F->second.first) || + Status.getLastModificationTime().toEpochTime() != + uint64_t(F->second.second)) AnyFileChanged = true; } |