Add GetCurrentDirectory back.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 14 Jun 2013 21:41:33 +0000 (21:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 14 Jun 2013 21:41:33 +0000 (21:41 +0000)
It looks like clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
depends on the behaviour of the old one on Windows. Maybe a difference
between GetCurrentDirectoryA and GetCurrentDirectoryW?

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

include/llvm/Support/PathV1.h
lib/Support/Unix/Path.inc
lib/Support/Windows/Path.inc

index d3f82bb567e4afd709b5d987d4bc26c6a20bea68..eaf255086969cc290732905d2f5754497677e540 100644 (file)
@@ -102,6 +102,11 @@ namespace sys {
       /// directory.
       static Path GetTemporaryDirectory(std::string* ErrMsg = 0);
 
+      /// Construct a path to the current directory for the current process.
+      /// @returns The current working directory.
+      /// @brief Returns the current working directory.
+      static Path GetCurrentDirectory();
+
       /// Return the suffix commonly used on file names that contain an
       /// executable.
       /// @returns The executable file suffix for the current platform.
index 06b18bec8b65d3e74b7c4b2caa3a3f9127fa4b6a..57f02be109471631219bc672f6bf23cdca88b334 100644 (file)
@@ -185,6 +185,17 @@ Path::GetTemporaryDirectory(std::string *ErrMsg) {
 #endif
 }
 
+Path
+Path::GetCurrentDirectory() {
+  char pathname[MAXPATHLEN];
+  if (!getcwd(pathname, MAXPATHLEN)) {
+    assert(false && "Could not query current working directory.");
+    return Path();
+  }
+
+  return Path(pathname);
+}
+
 #if defined(__FreeBSD__) || defined (__NetBSD__) || defined(__Bitrig__) || \
     defined(__OpenBSD__) || defined(__minix) || defined(__FreeBSD_kernel__) || \
     defined(__linux__) || defined(__CYGWIN__)
index bb1f77ab23cc70344ebce3e8301ced491a7b1e9b..4a6e56350b40197882c32cb604449565914105be 100644 (file)
@@ -20,6 +20,9 @@
 #include <cstdio>
 #include <malloc.h>
 
+// We need to undo a macro defined in Windows.h, otherwise we won't compile:
+#undef GetCurrentDirectory
+
 // Windows happily accepts either forward or backward slashes, though any path
 // returned by a Win32 API will have backward slashes.  As LLVM code basically
 // assumes forward slashes are used, backward slashs are converted where they
@@ -196,6 +199,13 @@ Path::GetTemporaryDirectory(std::string* ErrMsg) {
   return *TempDirectory;
 }
 
+Path
+Path::GetCurrentDirectory() {
+  char pathname[MAX_PATH];
+  ::GetCurrentDirectoryA(MAX_PATH,pathname);
+  return Path(pathname);
+}
+
 /// GetMainExecutable - Return the path to the main executable, given the
 /// value of argv[0] from program startup.
 Path Path::GetMainExecutable(const char *argv0, void *MainAddr) {