Fix destroyDirectory bug
authorJeff Cohen <jeffc@jolt-lang.org>
Sat, 22 Jan 2005 16:28:33 +0000 (16:28 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Sat, 22 Jan 2005 16:28:33 +0000 (16:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19746 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Win32/Path.inc

index 7f891f43f9fd590f19664810191451bffb958010..a28fd82d38a536efb1c4b562e899026c1c6ff4c5 100644 (file)
@@ -562,15 +562,17 @@ Path::destroyDirectory(bool remove_contents) const {
   // If it doesn't exist, we're done.
   if (!exists()) return true;
 
-  char *pathname = reinterpret_cast<char *>(_alloca(path.length()+1));
-  path.copy(pathname,path.length()+1);
+  char *pathname = reinterpret_cast<char *>(_alloca(path.length()+2));
   int lastchar = path.length() - 1 ;
-  if (pathname[lastchar] == '/')
-    pathname[lastchar] = 0;
+  path.copy(pathname,lastchar+2);
+
+  // Make path end with '/*'.
+  pathname[lastchar+1] = '*';
+  pathname[lastchar+2] = 0;
 
   if (remove_contents) {
     WIN32_FIND_DATA fd;
-    HANDLE h = FindFirstFile(path.c_str(), &fd);
+    HANDLE h = FindFirstFile(pathname, &fd);
 
     // It's a bad idea to alter the contents of a directory while enumerating
     // its contents.  So build a list of its contents first, then destroy them.
@@ -610,6 +612,7 @@ Path::destroyDirectory(bool remove_contents) const {
     }
   }
 
+  pathname[lastchar] = 0;
   if (!RemoveDirectory(pathname))
     ThrowError(std::string(pathname) + ": Can't destroy directory: ");
   return true;