winstorecompat: handle LoadLibraryA alongside LoadLibraryW
Signed-off-by: Martin Storsjö <martin@martin.st>
diff --git a/mingw-w64-headers/include/winbase.h b/mingw-w64-headers/include/winbase.h
index 1bc8531..8dd03de 100644
--- a/mingw-w64-headers/include/winbase.h
+++ b/mingw-w64-headers/include/winbase.h
@@ -1524,6 +1524,7 @@
#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || defined(WINSTORECOMPAT)
#define LoadLibrary __MINGW_NAME_AW(LoadLibrary)
WINBASEAPI HMODULE WINAPI LoadLibraryW (LPCWSTR lpLibFileName);
+ WINBASEAPI HMODULE WINAPI LoadLibraryA (LPCSTR lpLibFileName);
#endif
#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
WINBASEAPI HANDLE WINAPI OpenMutexA (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCSTR lpName);
@@ -1537,7 +1538,6 @@
#endif
WINBASEAPI HANDLE WINAPI OpenFileMappingA (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCSTR lpName);
WINBASEAPI DWORD WINAPI GetLogicalDriveStringsA (DWORD nBufferLength, LPSTR lpBuffer);
- WINBASEAPI HMODULE WINAPI LoadLibraryA (LPCSTR lpLibFileName);
#ifndef UNICODE
#define OpenMutex OpenMutexA
@@ -1549,7 +1549,6 @@
#endif
#define CreateWaitableTimer __MINGW_NAME_AW(CreateWaitableTimer)
-#define LoadLibrary __MINGW_NAME_AW(LoadLibrary)
#if _WIN32_WINNT >= 0x0600
#ifndef UNICODE
diff --git a/mingw-w64-libraries/winstorecompat/src/LoadLibraryW.c b/mingw-w64-libraries/winstorecompat/src/LoadLibraryW.c
index 428a6e0..9cbe216 100644
--- a/mingw-w64-libraries/winstorecompat/src/LoadLibraryW.c
+++ b/mingw-w64-libraries/winstorecompat/src/LoadLibraryW.c
@@ -25,17 +25,31 @@
#define _WIN32_WINNT 0x602 /* LoadPackagedLibrary is Win8 APP Family */
#define LoadLibraryW __LoadLibraryW
-#include <windef.h>
-#include <winbase.h>
+#define LoadLibraryA __LoadLibraryA
+#include <windows.h>
#undef LoadLibraryW
+#undef LoadLibraryA
HMODULE WINAPI LoadLibraryW(LPCWSTR lpFileName)
{
return LoadPackagedLibrary(lpFileName, 0);
}
+HMODULE WINAPI LoadLibraryA(LPCSTR lpFileName)
+{
+ int len = MultiByteToWideChar(GetACP(), 0, lpFileName, -1, NULL, 0);
+ if (len <= 0)
+ return NULL;
+
+ wchar_t *out = alloca(len);
+ MultiByteToWideChar(GetACP(), 0, lpFileName, -1, out, len);
+ return LoadLibraryW(out);
+}
+
#ifdef _X86_
HMODULE (WINAPI *__MINGW_IMP_SYMBOL(LoadLibraryW))(LPCWSTR lpFileName) __asm__("__imp__LoadLibraryW@4") = LoadLibraryW;
+HMODULE (WINAPI *__MINGW_IMP_SYMBOL(LoadLibraryA))(LPCSTR lpFileName) __asm__("__imp__LoadLibraryA@4") = LoadLibraryA;
#else
HMODULE (WINAPI *__MINGW_IMP_SYMBOL(LoadLibraryW))(LPCWSTR lpFileName) __asm__("__imp_LoadLibraryW") = LoadLibraryW;
+HMODULE (WINAPI *__MINGW_IMP_SYMBOL(LoadLibraryA))(LPCSTR lpFileName) __asm__("__imp_LoadLibraryA") = LoadLibraryA;
#endif