diff options
| author | Zachary Turner <zturner@google.com> | 2014-07-28 16:45:05 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2014-07-28 16:45:05 +0000 |
| commit | 9e757b7ebe5c3e1a07d4e3f5757f2dd19a78a8a1 (patch) | |
| tree | 58b4b7ab54deb3569c1709aeab99543f79d8081c | |
| parent | ad587ae4ca143d388c0ec4ef2faa1b5eddedbf67 (diff) | |
| download | bcm5719-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.h | 12 | ||||
| -rw-r--r-- | lldb/include/lldb/Host/windows/win32.h | 2 | ||||
| -rw-r--r-- | lldb/source/Host/common/Host.cpp | 18 | ||||
| -rw-r--r-- | lldb/source/Interpreter/CommandInterpreter.cpp | 8 |
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 |

