From 4fb322862829e4cacd701d07dc4a16ae71d52fc8 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 2 Nov 2022 06:28:27 +0100 Subject: [PATCH] Fixes to both versions of win_dynld.c. --- src/qt/win_dynld.c | 5 ++++- src/win/win_dynld.c | 49 ++++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/qt/win_dynld.c b/src/qt/win_dynld.c index 98eb4739f..aef74ede5 100644 --- a/src/qt/win_dynld.c +++ b/src/qt/win_dynld.c @@ -23,6 +23,7 @@ #include #define HAVE_STDARG_H #include <86box/86box.h> +#include <86box/plat.h> #include <86box/plat_dynld.h> @@ -52,9 +53,11 @@ dynld_module(const char *name, dllimp_t *table) HMODULE h; dllimp_t *imp; void *func; + WCHAR uname[512]; /* See if we can load the desired module. */ - if ((h = LoadLibrary(name)) == NULL) { + mbstoc16s(uname, name, strlen(name) + 1); + if ((h = LoadLibrary(uname)) == NULL) { dynld_log("DynLd(\"%s\"): library not found! (%08X)\n", name, GetLastError()); return(NULL); } diff --git a/src/win/win_dynld.c b/src/win/win_dynld.c index 66fd0503d..aef74ede5 100644 --- a/src/win/win_dynld.c +++ b/src/win/win_dynld.c @@ -23,61 +23,68 @@ #include #define HAVE_STDARG_H #include <86box/86box.h> +#include <86box/plat.h> #include <86box/plat_dynld.h> + #ifdef ENABLE_DYNLD_LOG int dynld_do_log = ENABLE_DYNLD_LOG; + static void dynld_log(const char *fmt, ...) { va_list ap; if (dynld_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); } } #else -# define dynld_log(fmt, ...) +#define dynld_log(fmt, ...) #endif + void * dynld_module(const char *name, dllimp_t *table) { - HMODULE h; + HMODULE h; dllimp_t *imp; - void *func; + void *func; + WCHAR uname[512]; /* See if we can load the desired module. */ - if ((h = LoadLibrary(name)) == NULL) { - dynld_log("DynLd(\"%s\"): library not found! (%08X)\n", name, GetLastError()); - return (NULL); + mbstoc16s(uname, name, strlen(name) + 1); + if ((h = LoadLibrary(uname)) == NULL) { + dynld_log("DynLd(\"%s\"): library not found! (%08X)\n", name, GetLastError()); + return(NULL); } /* Now load the desired function pointers. */ - for (imp = table; imp->name != NULL; imp++) { - func = GetProcAddress(h, imp->name); - if (func == NULL) { - dynld_log("DynLd(\"%s\"): function '%s' not found! (%08X)\n", - name, imp->name, GetLastError()); - FreeLibrary(h); - return (NULL); - } + for (imp=table; imp->name!=NULL; imp++) { + func = GetProcAddress(h, imp->name); + if (func == NULL) { + dynld_log("DynLd(\"%s\"): function '%s' not found! (%08X)\n", + name, imp->name, GetLastError()); + FreeLibrary(h); + return(NULL); + } - /* To overcome typing issues.. */ - *(char **) imp->func = (char *) func; + /* To overcome typing issues.. */ + *(char **)imp->func = (char *)func; } /* All good. */ dynld_log("loaded %s\n", name); - return ((void *) h); + return((void *)h); } + void dynld_close(void *handle) { if (handle != NULL) - FreeLibrary((HMODULE) handle); + FreeLibrary((HMODULE)handle); }