Introduce llvm::sys::path::home_directory.
[oota-llvm.git] / lib / Support / Windows / Path.inc
index 4ef7285801a6357fc99c23a086508e364caee256..e218fa2e726e69ba2001522ec76a34749421e75b 100644 (file)
@@ -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) {