[llvm-commits] [llvm] r121108 - in /llvm/trunk: include/llvm/Support/FileSystem.h include/llvm/Support/PathV2.h lib/Support/PathV2.cpp unittests/Support/Path.cpp

Michael J. Spencer bigcheesegs at gmail.com
Mon Dec 6 19:57:17 PST 2010


Author: mspencer
Date: Mon Dec  6 21:57:17 2010
New Revision: 121108

URL: http://llvm.org/viewvc/llvm-project?rev=121108&view=rev
Log:
Support/PathV2: Move make_absolute from path to fs.

Modified:
    llvm/trunk/include/llvm/Support/FileSystem.h
    llvm/trunk/include/llvm/Support/PathV2.h
    llvm/trunk/lib/Support/PathV2.cpp
    llvm/trunk/unittests/Support/Path.cpp

Modified: llvm/trunk/include/llvm/Support/FileSystem.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FileSystem.h?rev=121108&r1=121107&r2=121108&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/FileSystem.h (original)
+++ llvm/trunk/include/llvm/Support/FileSystem.h Mon Dec  6 21:57:17 2010
@@ -104,6 +104,19 @@
 /// @name Physical Operators
 /// @{
 
+/// @brief Make \a path an absolute path.
+///
+/// Makes \a path absolute using the current directory if it is not already. An
+/// empty \a path will result in the current directory.
+///
+/// /absolute/path   => /absolute/path
+/// relative/../path => <current-directory>/relative/../path
+///
+/// @param path A path that is modified to be an absolute path.
+/// @returns errc::success if \a path has been made absolute, otherwise a
+///          platform specific error_code.
+error_code make_absolute(SmallVectorImpl<char> &path);
+
 /// @brief Copy the file at \a from to the path \a to.
 ///
 /// @param from The path to copy the file from.

Modified: llvm/trunk/include/llvm/Support/PathV2.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PathV2.h?rev=121108&r1=121107&r2=121108&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/PathV2.h (original)
+++ llvm/trunk/include/llvm/Support/PathV2.h Mon Dec  6 21:57:17 2010
@@ -117,19 +117,6 @@
 /// @name Lexical Modifiers
 /// @{
 
-/// @brief Make \a path an absolute path.
-///
-/// Makes \a path absolute using the current directory if it is not already. An
-/// empty \a path will result in the current directory.
-///
-/// /absolute/path   => /absolute/path
-/// relative/../path => <current-directory>/relative/../path
-///
-/// @param path A path that is modified to be an absolute path.
-/// @returns errc::success if \a path has been made absolute, otherwise a
-///          platform specific error_code.
-error_code make_absolute(SmallVectorImpl<char> &path);
-
 /// @brief Remove the last component from \a path unless it is the root dir.
 ///
 /// directory/filename.cpp => directory/

Modified: llvm/trunk/lib/Support/PathV2.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PathV2.cpp?rev=121108&r1=121107&r2=121108&view=diff
==============================================================================
--- llvm/trunk/lib/Support/PathV2.cpp (original)
+++ llvm/trunk/lib/Support/PathV2.cpp Mon Dec  6 21:57:17 2010
@@ -424,61 +424,6 @@
   return success;
 }
 
-error_code make_absolute(SmallVectorImpl<char> &path) {
-  StringRef p(path.data(), path.size());
-
-  bool rootName = false, rootDirectory = false;
-  if (error_code ec = has_root_name(p, rootName)) return ec;
-  if (error_code ec = has_root_directory(p, rootDirectory)) return ec;
-
-  // Already absolute.
-  if (rootName && rootDirectory)
-    return success;
-
-  // All of the following conditions will need the current directory.
-  SmallString<128> current_dir;
-  if (error_code ec = fs::current_path(current_dir)) return ec;
-
-  // Relative path. Prepend the current directory.
-  if (!rootName && !rootDirectory) {
-    // Append path to the current directory.
-    if (error_code ec = append(current_dir, p)) return ec;
-    // Set path to the result.
-    path.swap(current_dir);
-    return success;
-  }
-
-  if (!rootName && rootDirectory) {
-    StringRef cdrn;
-    if (error_code ec = root_name(current_dir, cdrn)) return ec;
-    SmallString<128> curDirRootName(cdrn.begin(), cdrn.end());
-    if (error_code ec = append(curDirRootName, p)) return ec;
-    // Set path to the result.
-    path.swap(curDirRootName);
-    return success;
-  }
-
-  if (rootName && !rootDirectory) {
-    StringRef pRootName;
-    StringRef bRootDirectory;
-    StringRef bRelativePath;
-    StringRef pRelativePath;
-    if (error_code ec = root_name(p, pRootName)) return ec;
-    if (error_code ec = root_directory(current_dir, bRootDirectory)) return ec;
-    if (error_code ec = relative_path(current_dir, bRelativePath)) return ec;
-    if (error_code ec = relative_path(p, pRelativePath)) return ec;
-
-    SmallString<128> res;
-    if (error_code ec = append(res, pRootName, bRootDirectory,
-                                    bRelativePath, pRelativePath)) return ec;
-    path.swap(res);
-    return success;
-  }
-
-  llvm_unreachable("All rootName and rootDirectory combinations should have "
-                   "occurred above!");
-}
-
 error_code parent_path(const StringRef &path, StringRef &result) {
   size_t end_pos = parent_path_end(path);
   if (end_pos == StringRef::npos)
@@ -673,6 +618,63 @@
 
 namespace fs {
 
+error_code make_absolute(SmallVectorImpl<char> &path) {
+  StringRef p(path.data(), path.size());
+
+  bool rootName = false, rootDirectory = false;
+  if (error_code ec = path::has_root_name(p, rootName)) return ec;
+  if (error_code ec = path::has_root_directory(p, rootDirectory)) return ec;
+
+  // Already absolute.
+  if (rootName && rootDirectory)
+    return success;
+
+  // All of the following conditions will need the current directory.
+  SmallString<128> current_dir;
+  if (error_code ec = current_path(current_dir)) return ec;
+
+  // Relative path. Prepend the current directory.
+  if (!rootName && !rootDirectory) {
+    // Append path to the current directory.
+    if (error_code ec = path::append(current_dir, p)) return ec;
+    // Set path to the result.
+    path.swap(current_dir);
+    return success;
+  }
+
+  if (!rootName && rootDirectory) {
+    StringRef cdrn;
+    if (error_code ec = path::root_name(current_dir, cdrn)) return ec;
+    SmallString<128> curDirRootName(cdrn.begin(), cdrn.end());
+    if (error_code ec = path::append(curDirRootName, p)) return ec;
+    // Set path to the result.
+    path.swap(curDirRootName);
+    return success;
+  }
+
+  if (rootName && !rootDirectory) {
+    StringRef pRootName;
+    StringRef bRootDirectory;
+    StringRef bRelativePath;
+    StringRef pRelativePath;
+    if (error_code ec = path::root_name(p, pRootName)) return ec;
+    if (error_code ec = path::root_directory(current_dir, bRootDirectory))
+      return ec;
+    if (error_code ec = path::relative_path(current_dir, bRelativePath))
+      return ec;
+    if (error_code ec = path::relative_path(p, pRelativePath)) return ec;
+
+    SmallString<128> res;
+    if (error_code ec = path::append(res, pRootName, bRootDirectory,
+                                     bRelativePath, pRelativePath)) return ec;
+    path.swap(res);
+    return success;
+  }
+
+  llvm_unreachable("All rootName and rootDirectory combinations should have "
+                   "occurred above!");
+}
+
 error_code create_directories(const Twine &path, bool &existed) {
   SmallString<128> path_storage;
   StringRef p = path.toStringRef(path_storage);

Modified: llvm/trunk/unittests/Support/Path.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=121108&r1=121107&r2=121108&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/Path.cpp (original)
+++ llvm/trunk/unittests/Support/Path.cpp Mon Dec  6 21:57:17 2010
@@ -104,7 +104,7 @@
 
     SmallString<16> temp_store;
     temp_store = *i;
-    ASSERT_FALSE(path::make_absolute(temp_store));
+    ASSERT_FALSE(fs::make_absolute(temp_store));
     temp_store = *i;
     ASSERT_FALSE(path::remove_filename(temp_store));
 





More information about the llvm-commits mailing list