summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2014-07-28 16:45:05 +0000
committerZachary Turner <zturner@google.com>2014-07-28 16:45:05 +0000
commit9e757b7ebe5c3e1a07d4e3f5757f2dd19a78a8a1 (patch)
tree58b4b7ab54deb3569c1709aeab99543f79d8081c
parentad587ae4ca143d388c0ec4ef2faa1b5eddedbf67 (diff)
downloadbcm5719-llvm-9e757b7ebe5c3e1a07d4e3f5757f2dd19a78a8a1.tar.gz
bcm5719-llvm-9e757b7ebe5c3e1a07d4e3f5757f2dd19a78a8a1.zip
Use llvm Support functions to get the user's home directory.
Assuming that the user's home directory is at ~ is incorrect on Windows. This patch delegates the request to LLVM's support library, which already provides a cross-platform implementation of this function. Differential Revision: http://reviews.llvm.org/D4674 llvm-svn: 214093
-rw-r--r--lldb/include/lldb/Host/Host.h12
-rw-r--r--lldb/include/lldb/Host/windows/win32.h2
-rw-r--r--lldb/source/Host/common/Host.cpp18
-rw-r--r--lldb/source/Interpreter/CommandInterpreter.cpp8
4 files changed, 36 insertions, 4 deletions
diff --git a/lldb/include/lldb/Host/Host.h b/lldb/include/lldb/Host/Host.h
index 1203f1ce6b4..ab048f711a5 100644
--- a/lldb/include/lldb/Host/Host.h
+++ b/lldb/include/lldb/Host/Host.h
@@ -19,6 +19,7 @@
#include "lldb/lldb-private.h"
#include "lldb/Core/StringList.h"
#include "lldb/Host/File.h"
+#include "lldb/Host/FileSpec.h"
namespace lldb_private {
@@ -361,6 +362,17 @@ public:
SetShortThreadName (lldb::pid_t pid, lldb::tid_t tid, const char *name, size_t len);
//------------------------------------------------------------------
+ /// Gets the FileSpec of the user profile directory. On Posix-platforms
+ /// this is ~, and on windows this is generally something like
+ /// C:\Users\Alice.
+ ///
+ /// @return
+ /// \b A file spec with the path to the user's home directory.
+ //------------------------------------------------------------------
+ static FileSpec
+ GetUserProfileFileSpec ();
+
+ //------------------------------------------------------------------
/// Gets the FileSpec of the current process (the process that
/// that is running the LLDB code).
///
diff --git a/lldb/include/lldb/Host/windows/win32.h b/lldb/include/lldb/Host/windows/win32.h
index 96d5a645606..8fdc0f80de1 100644
--- a/lldb/include/lldb/Host/windows/win32.h
+++ b/lldb/include/lldb/Host/windows/win32.h
@@ -19,7 +19,7 @@ char * strcasestr(const char *s, const char* find);
char* realpath(const char * name, char * resolved);
#ifndef PATH_MAX
-#define PATH_MAX MAX_PATH
+#define PATH_MAX 32768
#endif
#define O_NOCTTY 0
diff --git a/lldb/source/Host/common/Host.cpp b/lldb/source/Host/common/Host.cpp
index 09c392b8516..d058c2f06b8 100644
--- a/lldb/source/Host/common/Host.cpp
+++ b/lldb/source/Host/common/Host.cpp
@@ -75,6 +75,7 @@
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Support/Host.h"
+#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#if defined (__APPLE__)
@@ -828,6 +829,19 @@ Host::SetShortThreadName (lldb::pid_t pid, lldb::tid_t tid,
#endif
FileSpec
+Host::GetUserProfileFileSpec ()
+{
+ static FileSpec g_profile_filespec;
+ if (!g_profile_filespec)
+ {
+ llvm::SmallString<64> path;
+ llvm::sys::path::home_directory(path);
+ return FileSpec(path.c_str(), false);
+ }
+ return g_profile_filespec;
+}
+
+FileSpec
Host::GetProgramFileSpec ()
{
static FileSpec g_program_filespec;
@@ -867,6 +881,10 @@ Host::GetProgramFileSpec ()
g_program_filespec.SetFile(exe_path, false);
delete[] exe_path;
}
+#elif defined(_WIN32)
+ std::vector<char> buffer(PATH_MAX);
+ ::GetModuleFileName(NULL, &buffer[0], buffer.size());
+ g_program_filespec.SetFile(&buffer[0], false, FileSpec::ePathSyntaxWindows);
#endif
}
return g_program_filespec;
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 59b779f29ac..33a0912307d 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -2381,7 +2381,9 @@ CommandInterpreter::SourceInitFile (bool in_cwd, CommandReturnObject &result)
// "-" and the name of the program. If this file doesn't exist, we fall
// back to just the "~/.lldbinit" file. We also obey any requests to not
// load the init files.
- const char *init_file_path = "~/.lldbinit";
+ FileSpec profilePath = Host::GetUserProfileFileSpec();
+ profilePath.AppendPathComponent(".lldbinit");
+ std::string init_file_path = profilePath.GetPath();
if (m_skip_app_init_files == false)
{
@@ -2391,7 +2393,7 @@ CommandInterpreter::SourceInitFile (bool in_cwd, CommandReturnObject &result)
if (program_name)
{
char program_init_file_name[PATH_MAX];
- ::snprintf (program_init_file_name, sizeof(program_init_file_name), "%s-%s", init_file_path, program_name);
+ ::snprintf (program_init_file_name, sizeof(program_init_file_name), "%s-%s", init_file_path.c_str(), program_name);
init_file.SetFile (program_init_file_name, true);
if (!init_file.Exists())
init_file.Clear();
@@ -2399,7 +2401,7 @@ CommandInterpreter::SourceInitFile (bool in_cwd, CommandReturnObject &result)
}
if (!init_file && !m_skip_lldbinit_files)
- init_file.SetFile (init_file_path, true);
+ init_file.SetFile (init_file_path.c_str(), false);
}
// If the file exists, tell HandleCommand to 'source' it; this will do the actual broadcasting
OpenPOWER on IntegriCloud