summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2010-11-09 15:11:19 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2010-11-09 15:11:19 +0000
commiteebe970c36cbc571910587bfc2efbd3bec47a9ff (patch)
treea392edda0f301db2bab38117fa974461f9b84d45
parent966023b58ad779cb447a0cfb751de0c823925340 (diff)
downloadllvm-eebe970c36cbc571910587bfc2efbd3bec47a9ff.tar.gz
llvm-eebe970c36cbc571910587bfc2efbd3bec47a9ff.tar.bz2
llvm-eebe970c36cbc571910587bfc2efbd3bec47a9ff.tar.xz
System/Path/Windows: Make GetSystemLibraryPaths more generic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118505 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/System/Win32/Path.inc28
-rw-r--r--lib/System/Win32/Win32.h2
2 files changed, 28 insertions, 2 deletions
diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc
index 75f6b7134a..9187c82793 100644
--- a/lib/System/Win32/Path.inc
+++ b/lib/System/Win32/Path.inc
@@ -240,8 +240,32 @@ Path::GetRootDirectory() {
void
Path::GetSystemLibraryPaths(std::vector<sys::Path>& Paths) {
- Paths.push_back(sys::Path("C:/WINDOWS/SYSTEM32"));
- Paths.push_back(sys::Path("C:/WINDOWS"));
+ char buff[MAX_PATH];
+ // Generic form of C:\Windows\System32
+ HRESULT res = SHGetFolderPathA(NULL,
+ CSIDL_FLAG_CREATE | CSIDL_SYSTEM,
+ NULL,
+ SHGFP_TYPE_CURRENT,
+ buff);
+ if (res != S_OK) {
+ assert(0 && "Failed to get system directory");
+ return;
+ }
+ Paths.push_back(sys::Path(buff));
+
+ // Reset buff.
+ buff[0] = 0;
+ // Generic form of C:\Windows
+ res = SHGetFolderPathA(NULL,
+ CSIDL_FLAG_CREATE | CSIDL_WINDOWS,
+ NULL,
+ SHGFP_TYPE_CURRENT,
+ buff);
+ if (res != S_OK) {
+ assert(0 && "Failed to get windows directory");
+ return;
+ }
+ Paths.push_back(sys::Path(buff));
}
void
diff --git a/lib/System/Win32/Win32.h b/lib/System/Win32/Win32.h
index d054812c76..00a7e75fc2 100644
--- a/lib/System/Win32/Win32.h
+++ b/lib/System/Win32/Win32.h
@@ -18,10 +18,12 @@
// Require at least Windows 2000 API.
#define _WIN32_WINNT 0x0500
+#define _WIN32_IE 0x0500 // MinGW at it again.
#define WIN32_LEAN_AND_MEAN
#include "llvm/Config/config.h" // Get build system configuration settings
#include <Windows.h>
+#include <ShlObj.h>
#include <cassert>
#include <string>