summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/System/Path.h5
-rw-r--r--lib/System/Unix/Path.inc10
-rw-r--r--lib/System/Win32/Path.inc9
3 files changed, 24 insertions, 0 deletions
diff --git a/include/llvm/System/Path.h b/include/llvm/System/Path.h
index 8ae8a006f8..ee26b82c71 100644
--- a/include/llvm/System/Path.h
+++ b/include/llvm/System/Path.h
@@ -148,6 +148,11 @@ namespace sys {
/// constructor must provide the same result as GetRootDirectory.
/// @brief Construct a path to the current user's "home" directory
static Path GetUserHomeDirectory();
+
+ /// 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 a shared
/// object, shared archive, or dynamic link library. Such files are
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index 9e90dda04e..025357258d 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -250,6 +250,16 @@ Path::GetUserHomeDirectory() {
return GetRootDirectory();
}
+Path
+Path::GetCurrentDirectory() {
+ char pathname[MAXPATHLEN];
+ if (!getcwd(pathname,MAXPATHLEN)) {
+ assert (false && "Could not query current working directory.");
+ return Path("");
+ }
+
+ return Path(pathname);
+}
std::string
Path::getBasename() const {
diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc
index 2484b8a744..7d96529161 100644
--- a/lib/System/Win32/Path.inc
+++ b/lib/System/Win32/Path.inc
@@ -222,6 +222,15 @@ Path::GetUserHomeDirectory() {
}
return GetRootDirectory();
}
+
+Path
+Path::GetCurrentDirectory() {
+ char pathname[MAX_PATH];
+ GetCurrentDirectory(pathname,MAX_PATH);
+ return Path(pathname);
+}
+
+
// FIXME: the above set of functions don't map to Windows very well.