Added method Path::getDirname().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49352 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Path.cpp b/lib/System/Path.cpp
index 8a1de75..43c36d5 100644
--- a/lib/System/Path.cpp
+++ b/lib/System/Path.cpp
@@ -196,6 +196,45 @@
Paths.push_back(tmpPath);
}
+std::string Path::getDirnameCharSep(char Sep) const {
+
+ if (path.empty())
+ return ".";
+
+ // If the path is all slashes, return a single slash.
+ // Otherwise, remove all trailing slashes.
+
+ signed pos = path.size() - 1;
+
+ while (pos >= 0 && path[pos] == Sep)
+ --pos;
+
+ if (pos < 0)
+ return path[0] == Sep ? std::string(1, Sep) : std::string(".");
+
+ // Any slashes left?
+ signed i = 0;
+
+ while (i < pos && path[i] != Sep)
+ ++i;
+
+ if (i == pos) // No slashes? Return "."
+ return ".";
+
+ // There is at least one slash left. Remove all trailing non-slashes.
+ while (pos >= 0 && path[pos] != Sep)
+ --pos;
+
+ // Remove any trailing slashes.
+ while (pos >= 0 && path[pos] == Sep)
+ --pos;
+
+ if (pos < 0)
+ return path[0] == Sep ? std::string(1, Sep) : std::string(".");
+
+ return path.substr(0, pos+1);
+}
+
// Include the truly platform-specific parts of this class.
#if defined(LLVM_ON_UNIX)
#include "Unix/Path.inc"