[Graph Writer] Limit the length of the graph name because Windows can't handle it.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 22 May 2014 23:32:18 +0000 (23:32 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Thu, 22 May 2014 23:32:18 +0000 (23:32 +0000)
Windows can't handle paths longer than 260 code points without \\?\. Even
with \\?\ it can't handle path components longer than 255 code points. So
limit graph names to the arbitrary length of 140. Random characters are still
added to the end, so it's ok if graph names collide.

Differential Revision: http://reviews.llvm.org/D3883

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

include/llvm/Support/GraphWriter.h

index 660c519ed64cd72b3fdfe2517cd7079153d9ecc6..539673a8beeeedb67ae7fd9ca3cb53828d8cadc9 100644 (file)
@@ -325,7 +325,10 @@ template <typename GraphType>
 std::string WriteGraph(const GraphType &G, const Twine &Name,
                        bool ShortNames = false, const Twine &Title = "") {
   int FD;
-  std::string Filename = createGraphFilename(Name, FD);
+  // Windows can't always handle long paths, so limit the length of the name.
+  std::string N = Name.str();
+  N = N.substr(0, std::min<std::size_t>(N.size(), 140));
+  std::string Filename = createGraphFilename(N, FD);
   raw_fd_ostream O(FD, /*shouldClose=*/ true);
 
   if (FD == -1) {