]> granicus.if.org Git - clang/commitdiff
[Basic/FileManager] Propagate whether a file 'IsVolatile' to the file opening functions.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 5 May 2014 21:57:46 +0000 (21:57 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 5 May 2014 21:57:46 +0000 (21:57 +0000)
Needs llvm r208007.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208008 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/VirtualFileSystem.h
lib/Basic/FileManager.cpp
lib/Basic/VirtualFileSystem.cpp

index 5595e143bc27abc4952933a3045541c0ff40bbc1..f6307db9918365dfa22d36b15ab28f9a996b204d 100644 (file)
@@ -86,7 +86,8 @@ public:
   /// \brief Get the contents of the file as a \p MemoryBuffer.
   virtual llvm::error_code
   getBuffer(const Twine &Name, std::unique_ptr<llvm::MemoryBuffer> &Result,
-            int64_t FileSize = -1, bool RequiresNullTerminator = true) = 0;
+            int64_t FileSize = -1, bool RequiresNullTerminator = true,
+            bool IsVolatile = false) = 0;
   /// \brief Closes the file.
   virtual llvm::error_code close() = 0;
   /// \brief Sets the name to use for this file.
@@ -109,7 +110,8 @@ public:
   llvm::error_code getBufferForFile(const Twine &Name,
                                     std::unique_ptr<llvm::MemoryBuffer> &Result,
                                     int64_t FileSize = -1,
-                                    bool RequiresNullTerminator = true);
+                                    bool RequiresNullTerminator = true,
+                                    bool IsVolatile = false);
 };
 
 /// \brief Gets an \p vfs::FileSystem for the 'real' file system, as seen by
index 579c8185b3d193c9de4a451415f254eb9d11e896..5d7d9390d292f87dcc661deee252b8d247d3e754 100644 (file)
@@ -391,7 +391,8 @@ getBufferForFile(const FileEntry *Entry, std::string *ErrorStr,
   const char *Filename = Entry->getName();
   // If the file is already open, use the open file descriptor.
   if (Entry->File) {
-    ec = Entry->File->getBuffer(Filename, Result, FileSize);
+    ec = Entry->File->getBuffer(Filename, Result, FileSize,
+                                /*RequiresNullTerminator=*/true, isVolatile);
     if (ErrorStr)
       *ErrorStr = ec.message();
     Entry->closeFile();
@@ -401,7 +402,8 @@ getBufferForFile(const FileEntry *Entry, std::string *ErrorStr,
   // Otherwise, open the file.
 
   if (FileSystemOpts.WorkingDir.empty()) {
-    ec = FS->getBufferForFile(Filename, Result, FileSize);
+    ec = FS->getBufferForFile(Filename, Result, FileSize,
+                              /*RequiresNullTerminator=*/true, isVolatile);
     if (ec && ErrorStr)
       *ErrorStr = ec.message();
     return Result.release();
@@ -409,7 +411,8 @@ getBufferForFile(const FileEntry *Entry, std::string *ErrorStr,
 
   SmallString<128> FilePath(Entry->getName());
   FixupRelativePath(FilePath);
-  ec = FS->getBufferForFile(FilePath.str(), Result, FileSize);
+  ec = FS->getBufferForFile(FilePath.str(), Result, FileSize,
+                            /*RequiresNullTerminator=*/true, isVolatile);
   if (ec && ErrorStr)
     *ErrorStr = ec.message();
   return Result.release();
index 9a88cfd389710edd01391629ea310a9822bb109b..94a6c3dca6f1d1e2ba09cda24d90b4c45bef17a1 100644 (file)
@@ -67,12 +67,14 @@ FileSystem::~FileSystem() {}
 error_code FileSystem::getBufferForFile(const llvm::Twine &Name,
                                         std::unique_ptr<MemoryBuffer> &Result,
                                         int64_t FileSize,
-                                        bool RequiresNullTerminator) {
+                                        bool RequiresNullTerminator,
+                                        bool IsVolatile) {
   std::unique_ptr<File> F;
   if (error_code EC = openFileForRead(Name, F))
     return EC;
 
-  error_code EC = F->getBuffer(Name, Result, FileSize, RequiresNullTerminator);
+  error_code EC = F->getBuffer(Name, Result, FileSize, RequiresNullTerminator,
+                               IsVolatile);
   return EC;
 }
 
@@ -95,7 +97,8 @@ public:
   ErrorOr<Status> status() override;
   error_code getBuffer(const Twine &Name, std::unique_ptr<MemoryBuffer> &Result,
                        int64_t FileSize = -1,
-                       bool RequiresNullTerminator = true) override;
+                       bool RequiresNullTerminator = true,
+                       bool IsVolatile = false) override;
   error_code close() override;
   void setName(StringRef Name) override;
 };
@@ -117,10 +120,11 @@ ErrorOr<Status> RealFile::status() {
 
 error_code RealFile::getBuffer(const Twine &Name,
                                std::unique_ptr<MemoryBuffer> &Result,
-                               int64_t FileSize, bool RequiresNullTerminator) {
+                               int64_t FileSize, bool RequiresNullTerminator,
+                               bool IsVolatile) {
   assert(FD != -1 && "cannot get buffer for closed file");
   return MemoryBuffer::getOpenFile(FD, Name.str().c_str(), Result, FileSize,
-                                   RequiresNullTerminator);
+                                   RequiresNullTerminator, IsVolatile);
 }
 
 // FIXME: This is terrible, we need this for ::close.