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