From 671a29d30d2fe5d5d3bab0123690849f98ac031f Mon Sep 17 00:00:00 2001 From: Jason Molenda Date: Wed, 25 Feb 2015 02:35:25 +0000 Subject: [PATCH] When FileSpec::Resolve is given a bare file like "ls", and llvm::sys::fs::make_absolute prepends the current working directory to that path, leave the original bare file name unchanged if $cwd/ls doesn't exist. http://reviews.llvm.org/D7477 llvm-svn: 230451 --- lldb/source/Host/common/FileSpec.cpp | 13 +++++++++++++ lldb/test/functionalities/paths/TestPaths.py | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/lldb/source/Host/common/FileSpec.cpp b/lldb/source/Host/common/FileSpec.cpp index 19f3b93..553764e 100644 --- a/lldb/source/Host/common/FileSpec.cpp +++ b/lldb/source/Host/common/FileSpec.cpp @@ -164,7 +164,20 @@ FileSpec::Resolve (llvm::SmallVectorImpl &path) ResolveUsername(path); #endif // #ifdef LLDB_CONFIG_TILDE_RESOLVES_TO_USER + // Save a copy of the original path that's passed in + llvm::SmallString 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.append(original_path.begin(), original_path.end()); + } } FileSpec::FileSpec() : diff --git a/lldb/test/functionalities/paths/TestPaths.py b/lldb/test/functionalities/paths/TestPaths.py index c4bafa0..a211145 100644 --- a/lldb/test/functionalities/paths/TestPaths.py +++ b/lldb/test/functionalities/paths/TestPaths.py @@ -28,6 +28,12 @@ class TestPaths(TestBase): # 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 ''' -- 2.7.4