]> granicus.if.org Git - clang/commitdiff
[FileManager] Use StringRef::copy to store canonical paths.
authorBenjamin Kramer <benny.kra@googlemail.com>
Tue, 4 Aug 2015 11:27:08 +0000 (11:27 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Tue, 4 Aug 2015 11:27:08 +0000 (11:27 +0000)
No functional change intended.

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

lib/Basic/FileManager.cpp

index 034ebc5c88b2ab88a44b02589571faa13c2a8541..21e6ea3ab4bbb298535ef0fb2dcf402d54fc45b1 100644 (file)
@@ -570,12 +570,8 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {
 
 #ifdef LLVM_ON_UNIX
   char CanonicalNameBuf[PATH_MAX];
-  if (realpath(Dir->getName(), CanonicalNameBuf)) {
-    unsigned Len = strlen(CanonicalNameBuf);
-    char *Mem = static_cast<char *>(CanonicalNameStorage.Allocate(Len, 1));
-    memcpy(Mem, CanonicalNameBuf, Len);
-    CanonicalName = StringRef(Mem, Len);
-  }
+  if (realpath(Dir->getName(), CanonicalNameBuf))
+    CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage);
 #else
   SmallString<256> CanonicalNameBuf(CanonicalName);
   llvm::sys::fs::make_absolute(CanonicalNameBuf);
@@ -587,9 +583,7 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {
   // Ideally we'd have an equivalent of `realpath` and could implement
   // sys::fs::canonical across all the platforms.
   removeDotPaths(CanonicalNameBuf, /*RemoveDotDot*/true);
-  char *Mem = CanonicalNameStorage.Allocate<char>(CanonicalNameBuf.size());
-  memcpy(Mem, CanonicalNameBuf.data(), CanonicalNameBuf.size());
-  CanonicalName = StringRef(Mem, CanonicalNameBuf.size());
+  CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage);
 #endif
 
   CanonicalDirNames.insert(std::make_pair(Dir, CanonicalName));