forked from OSchip/llvm-project
Introduce llvm::sys::path::home_directory.
This will be used by the line editor library to derive a default path to the history file. Differential Revision: http://llvm-reviews.chandlerc.com/D2199 llvm-svn: 200594
This commit is contained in:
parent
dfbed59cc2
commit
f7d4101156
|
@ -306,6 +306,12 @@ bool is_separator(char value);
|
|||
/// @param result Holds the resulting path name.
|
||||
void system_temp_directory(bool erasedOnReboot, SmallVectorImpl<char> &result);
|
||||
|
||||
/// @brief Get the user's home directory.
|
||||
///
|
||||
/// @param result Holds the resulting path name.
|
||||
/// @result True if a home directory is set, false otherwise.
|
||||
bool home_directory(SmallVectorImpl<char> &result);
|
||||
|
||||
/// @brief Has root name?
|
||||
///
|
||||
/// root_name != ""
|
||||
|
|
|
@ -797,5 +797,20 @@ error_code openFileForWrite(const Twine &Name, int &ResultFD,
|
|||
}
|
||||
|
||||
} // end namespace fs
|
||||
|
||||
namespace path {
|
||||
|
||||
bool home_directory(SmallVectorImpl<char> &result) {
|
||||
if (char *RequestedDir = getenv("HOME")) {
|
||||
result.clear();
|
||||
result.append(RequestedDir, RequestedDir + strlen(RequestedDir));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // end namespace path
|
||||
|
||||
} // end namespace sys
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "llvm/ADT/STLExtras.h"
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#include <shlobj.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
@ -1063,6 +1064,22 @@ error_code openFileForWrite(const Twine &Name, int &ResultFD,
|
|||
}
|
||||
} // end namespace fs
|
||||
|
||||
namespace path {
|
||||
|
||||
bool home_directory(SmallVectorImpl<char> &result) {
|
||||
wchar_t Path[MAX_PATH];
|
||||
if (::SHGetFolderPathW(0, CSIDL_APPDATA | CSIDL_FLAG_CREATE, 0,
|
||||
SHGFP_TYPE_CURRENT, Path) != S_OK)
|
||||
return false;
|
||||
|
||||
if (UTF16ToUTF8(Path, ::wcslen(Path), result))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // end namespace path
|
||||
|
||||
namespace windows {
|
||||
llvm::error_code UTF8ToUTF16(llvm::StringRef utf8,
|
||||
llvm::SmallVectorImpl<wchar_t> &utf16) {
|
||||
|
|
|
@ -210,6 +210,19 @@ TEST(Support, AbsolutePathIteratorWin32) {
|
|||
}
|
||||
#endif // LLVM_ON_WIN32
|
||||
|
||||
TEST(Support, HomeDirectory) {
|
||||
#ifdef LLVM_ON_UNIX
|
||||
// This test only makes sense on Unix if $HOME is set.
|
||||
if (::getenv("HOME")) {
|
||||
#endif
|
||||
SmallString<128> HomeDir;
|
||||
EXPECT_TRUE(path::home_directory(HomeDir));
|
||||
EXPECT_FALSE(HomeDir.empty());
|
||||
#ifdef LLVM_ON_UNIX
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
class FileSystemTest : public testing::Test {
|
||||
protected:
|
||||
/// Unique temporary directory in which all created filesystem entities must
|
||||
|
|
Loading…
Reference in New Issue