Updated patch to include the fixes Zachary suggested, added a simple test case 
for this behavior to functionality/paths.


REPOSITORY
  rL LLVM

http://reviews.llvm.org/D7477

Files:
  source/Host/common/FileSpec.cpp
  test/functionalities/paths/TestPaths.py

Index: source/Host/common/FileSpec.cpp
===================================================================
--- source/Host/common/FileSpec.cpp
+++ source/Host/common/FileSpec.cpp
@@ -164,7 +164,21 @@
         ResolveUsername(path);
 #endif // #ifdef LLDB_CONFIG_TILDE_RESOLVES_TO_USER
 
+    // Save a copy of the original path that's passed in
+    llvm::SmallString<PATH_MAX> original_path(path.begin(), path.end());
+
     llvm::sys::fs::make_absolute(path);
+
+    
+    path.push_back(0);  // Be sure we have a nul terminated string
+    path.pop_back();
+    struct stat file_stats;
+    if (::stat (path.data(), &file_stats) != 0)
+    {
+        path.clear();
+        path.resize (original_path.size());
+        memcpy (path.data(), original_path.data(), original_path.size());
+    }
 }
 
 FileSpec::FileSpec() : 
Index: test/functionalities/paths/TestPaths.py
===================================================================
--- test/functionalities/paths/TestPaths.py
+++ test/functionalities/paths/TestPaths.py
@@ -28,6 +28,12 @@
             # No directory path types should have the filename set
             self.assertTrue (f.GetFilename() == None);
 
+    def test_filespec_resolve_doesnt_prepend_cwd_if_file_doesnt_exist (self):
+        file_only = 
lldb.SBFileSpec("VeryUnlikelToExistInTheCurrentWorkingDirectory", True)
+        # SBFileSpec(path, True) should not prepend the 
current-working-directory to the
+        # file path if it doesn't exist in the current directory.
+        self.assertTrue (file_only.GetDirectory() == None)
+
     @unittest2.skipUnless(sys.platform.startswith("win32"), "Test for windows 
only")
     def test_windows_double_slash (self):
         '''Test to check the path with double slash is handled correctly '''

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: source/Host/common/FileSpec.cpp
===================================================================
--- source/Host/common/FileSpec.cpp
+++ source/Host/common/FileSpec.cpp
@@ -164,7 +164,21 @@
         ResolveUsername(path);
 #endif // #ifdef LLDB_CONFIG_TILDE_RESOLVES_TO_USER
 
+    // Save a copy of the original path that's passed in
+    llvm::SmallString<PATH_MAX> original_path(path.begin(), path.end());
+
     llvm::sys::fs::make_absolute(path);
+
+    
+    path.push_back(0);  // Be sure we have a nul terminated string
+    path.pop_back();
+    struct stat file_stats;
+    if (::stat (path.data(), &file_stats) != 0)
+    {
+        path.clear();
+        path.resize (original_path.size());
+        memcpy (path.data(), original_path.data(), original_path.size());
+    }
 }
 
 FileSpec::FileSpec() : 
Index: test/functionalities/paths/TestPaths.py
===================================================================
--- test/functionalities/paths/TestPaths.py
+++ test/functionalities/paths/TestPaths.py
@@ -28,6 +28,12 @@
             # No directory path types should have the filename set
             self.assertTrue (f.GetFilename() == None);
 
+    def test_filespec_resolve_doesnt_prepend_cwd_if_file_doesnt_exist (self):
+        file_only = lldb.SBFileSpec("VeryUnlikelToExistInTheCurrentWorkingDirectory", True)
+        # SBFileSpec(path, True) should not prepend the current-working-directory to the
+        # file path if it doesn't exist in the current directory.
+        self.assertTrue (file_only.GetDirectory() == None)
+
     @unittest2.skipUnless(sys.platform.startswith("win32"), "Test for windows only")
     def test_windows_double_slash (self):
         '''Test to check the path with double slash is handled correctly '''
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to