summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2014-05-30 21:06:57 +0000
committerGreg Clayton <gclayton@apple.com>2014-05-30 21:06:57 +0000
commit6bc8739e57ed7ac57466836fa8fd4db8f0e5ddeb (patch)
treeb89351f2ec188339c6c5c3dc0c870596ee74624e /lldb
parent82560a91a5d5290af58a7a3fc0f8d9ec53ad9f10 (diff)
downloadbcm5719-llvm-6bc8739e57ed7ac57466836fa8fd4db8f0e5ddeb.tar.gz
bcm5719-llvm-6bc8739e57ed7ac57466836fa8fd4db8f0e5ddeb.zip
Don't use libc's "char *basename(char *)" or "char *dirname(char *)" as they are not thread safe.
I switched the lldb_private::FileSpec code over to use "llvm::StringRef llvm::sys::path::filename(llvm::StringRef)" for basename() and "llvm::StringRef llvm::sys::path::parent_path(llvm::StringRef)" for dirname(). <rdar://problem/16870083> llvm-svn: 209917
Diffstat (limited to 'lldb')
-rw-r--r--lldb/source/Host/common/FileSpec.cpp43
1 files changed, 8 insertions, 35 deletions
diff --git a/lldb/source/Host/common/FileSpec.cpp b/lldb/source/Host/common/FileSpec.cpp
index d4634ece83f..9df9bf3a843 100644
--- a/lldb/source/Host/common/FileSpec.cpp
+++ b/lldb/source/Host/common/FileSpec.cpp
@@ -324,40 +324,14 @@ FileSpec::SetFile (const char *pathname, bool resolve)
if (path_fit)
{
- char *filename = ::basename (resolved_path);
- if (filename)
+ llvm::StringRef resolve_path_ref(resolved_path);
+ llvm::StringRef filename_ref = llvm::sys::path::filename(resolve_path_ref);
+ if (!filename_ref.empty())
{
- m_filename.SetCString (filename);
- // Truncate the basename off the end of the resolved path
-
- // Only attempt to get the dirname if it looks like we have a path
- if (strchr(resolved_path, '/')
-#ifdef _WIN32
- || strchr(resolved_path, '\\')
-#endif
- )
- {
- char *directory = ::dirname (resolved_path);
-
- // Make sure we didn't get our directory resolved to "." without having
- // specified
- if (directory)
- m_directory.SetCString(directory);
- else
- {
- char *last_resolved_path_slash = strrchr(resolved_path, '/');
-#ifdef _WIN32
- char* last_resolved_path_slash_windows = strrchr(resolved_path, '\\');
- if (last_resolved_path_slash_windows > last_resolved_path_slash)
- last_resolved_path_slash = last_resolved_path_slash_windows;
-#endif
- if (last_resolved_path_slash)
- {
- *last_resolved_path_slash = '\0';
- m_directory.SetCString(resolved_path);
- }
- }
- }
+ m_filename.SetString (filename_ref);
+ llvm::StringRef directory_ref = llvm::sys::path::parent_path(resolve_path_ref);
+ if (!directory_ref.empty())
+ m_directory.SetString(directory_ref);
}
else
m_directory.SetCString(resolved_path);
@@ -572,8 +546,7 @@ FileSpec::ResolveExecutableLocation ()
const std::string file_str (file_cstr);
std::string path = llvm::sys::FindProgramByName (file_str);
llvm::StringRef dir_ref = llvm::sys::path::parent_path(path);
- //llvm::StringRef dir_ref = path.getDirname();
- if (! dir_ref.empty())
+ if (!dir_ref.empty())
{
// FindProgramByName returns "." if it can't find the file.
if (strcmp (".", dir_ref.data()) == 0)
OpenPOWER on IntegriCloud