]> granicus.if.org Git - clang/commitdiff
Convert FileManager::FixupRelativePath over to using PathV2.
authorAnders Carlsson <andersca@mac.com>
Sun, 6 Mar 2011 22:25:35 +0000 (22:25 +0000)
committerAnders Carlsson <andersca@mac.com>
Sun, 6 Mar 2011 22:25:35 +0000 (22:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127133 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/FileManager.h
lib/Basic/FileManager.cpp
lib/Frontend/CompilerInstance.cpp

index 563157fa8fbebcc597030ae30da9eb2d31f4e3e9..247e518ea8b8a21694286b262e7c874f5280acb0 100644 (file)
@@ -197,10 +197,9 @@ public:
   /// \brief If path is not absolute and FileSystemOptions set the working
   /// directory, the path is modified to be relative to the given
   /// working directory.
-  static void FixupRelativePath(llvm::sys::Path &path,
+  static void FixupRelativePath(llvm::SmallVectorImpl<char> &path,
                                 const FileSystemOptions &FSOpts);
 
-  
   /// \brief Produce an array mapping from the unique IDs assigned to each
   /// file to the corresponding FileEntry pointer.
   void GetUniqueIDMapping(
index 342413d7da52de58e8ac00bc8da4e83ce92718ae..2599cee3ae53e839122a3841dd651915573d0e5b 100644 (file)
@@ -450,13 +450,15 @@ FileManager::getVirtualFile(llvm::StringRef Filename, off_t Size,
   return UFE;
 }
 
-void FileManager::FixupRelativePath(llvm::sys::Path &path,
+void FileManager::FixupRelativePath(llvm::SmallVectorImpl<char> &path,
                                     const FileSystemOptions &FSOpts) {
-  if (FSOpts.WorkingDir.empty() || llvm::sys::path::is_absolute(path.str()))
+  llvm::StringRef pathRef(path.data(), path.size());
+
+  if (FSOpts.WorkingDir.empty() || llvm::sys::path::is_absolute(pathRef))
     return;
 
   llvm::SmallString<128> NewPath(FSOpts.WorkingDir);
-  llvm::sys::path::append(NewPath, path.str());
+  llvm::sys::path::append(NewPath, pathRef);
   path = NewPath;
 }
 
@@ -484,10 +486,10 @@ getBufferForFile(const FileEntry *Entry, std::string *ErrorStr) {
       *ErrorStr = ec.message();
     return Result.take();
   }
-  
-  llvm::sys::Path FilePath(Entry->getName());
+
+  llvm::SmallString<128> FilePath(Entry->getName());
   FixupRelativePath(FilePath, FileSystemOpts);
-  ec = llvm::MemoryBuffer::getFile(FilePath.c_str(), Result, Entry->getSize());
+  ec = llvm::MemoryBuffer::getFile(FilePath.str(), Result, Entry->getSize());
   if (ec && ErrorStr)
     *ErrorStr = ec.message();
   return Result.take();
@@ -504,7 +506,7 @@ getBufferForFile(llvm::StringRef Filename, std::string *ErrorStr) {
     return Result.take();
   }
 
-  llvm::sys::Path FilePath(Filename);
+  llvm::SmallString<128> FilePath(Filename);
   FixupRelativePath(FilePath, FileSystemOpts);
   ec = llvm::MemoryBuffer::getFile(FilePath.c_str(), Result);
   if (ec && ErrorStr)
@@ -525,7 +527,7 @@ bool FileManager::getStatValue(const char *Path, struct stat &StatBuf,
     return FileSystemStatCache::get(Path, StatBuf, FileDescriptor,
                                     StatCache.get());
 
-  llvm::sys::Path FilePath(Path);
+  llvm::SmallString<128> FilePath(Path);
   FixupRelativePath(FilePath, FileSystemOpts);
 
   return FileSystemStatCache::get(FilePath.c_str(), StatBuf, FileDescriptor,
index fd593de560c02a7231a0fd605f8508c6e9476073..70d6fef2951c2ae9ca89f001d2b77e64775d9b59 100644 (file)
@@ -362,19 +362,22 @@ void CompilerInstance::clearOutputFiles(bool EraseFiles) {
          it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie; ++it) {
     delete it->OS;
     if (!it->TempFilename.empty()) {
-      llvm::sys::Path TempPath(it->TempFilename);
-      if (EraseFiles)
-        TempPath.eraseFromDisk();
-      else {
-        std::string Error;
-        llvm::sys::Path NewOutFile(it->Filename);
+      if (EraseFiles) {
+        bool existed;
+        llvm::sys::fs::remove(it->TempFilename, existed);
+      else {
+        llvm::SmallString<128> NewOutFile(it->Filename);
+
         // If '-working-directory' was passed, the output filename should be
         // relative to that.
         FileManager::FixupRelativePath(NewOutFile, getFileSystemOpts());
-        if (TempPath.renamePathOnDisk(NewOutFile, &Error)) {
+        if (llvm::error_code ec = llvm::sys::fs::rename(it->TempFilename,
+                                                        NewOutFile.str())) {
           getDiagnostics().Report(diag::err_fe_unable_to_rename_temp)
-            << it->TempFilename << it->Filename << Error;
-          TempPath.eraseFromDisk();
+            << it->TempFilename << it->Filename << ec.message();
+
+          bool existed;
+          llvm::sys::fs::remove(it->TempFilename, existed);
         }
       }
     } else if (!it->Filename.empty() && EraseFiles)