diff --git a/src/mzscheme/src/string.c b/src/mzscheme/src/string.c index 45f61e7111..85fa7c8dac 100644 --- a/src/mzscheme/src/string.c +++ b/src/mzscheme/src/string.c @@ -61,7 +61,7 @@ typedef size_t (*iconv_proc_t)(iconv_t cd, typedef iconv_t (*iconv_open_proc_t)(const char *tocode, const char *fromcode); typedef void (*iconv_close_proc_t)(iconv_t cd); typedef char *(*locale_charset_proc_t)(); -static errno_proc_t msvcrt_errno; +static errno_proc_t iconv_errno; static iconv_proc_t iconv; static iconv_open_proc_t iconv_open; static iconv_close_proc_t iconv_close; @@ -74,20 +74,25 @@ static char *nl_langinfo(int which) static int get_iconv_errno(void) { int *a; - a = msvcrt_errno(); + a = iconv_errno(); return *a; } # undef HAVE_CODESET # define HAVE_CODESET 1 # define CODESET 0 # define ICONV_errno get_iconv_errno() +extern char *scheme_get_dll_path(char *s); static int iconv_ready = 0; static void init_iconv() { # ifdef MZ_NO_ICONV # else HMODULE m; - m = LoadLibrary("iconv.dll"); + m = LoadLibrary(scheme_get_dll_path("iconv.dll")); + if (!m) + m = LoadLibrary(scheme_get_dll_path("libiconv.dll")); + if (!m) + m = LoadLibrary("iconv.dll"); if (!m) m = LoadLibrary("libiconv.dll"); if (m) { @@ -103,13 +108,19 @@ static void init_iconv() } } if (iconv) { - m = LoadLibrary("msvcrt.dll"); - if (m) { - msvcrt_errno = (errno_proc_t)GetProcAddress(m, "_errno"); - if (!msvcrt_errno) { - iconv = NULL; - iconv_open = NULL; - iconv_close = NULL; + iconv_errno = (errno_proc_t)GetProcAddress(m, "_errno"); + if (!iconv_errno) { + /* The iconv.dll distributed with PLT Scheme links to msvcrt.dll. + It's a slighly dangerous assumption that whaetever iconv we + found also uses msvcrt.dll. */ + m = LoadLibrary("msvcrt.dll"); + if (m) { + iconv_errno = (errno_proc_t)GetProcAddress(m, "_errno"); + if (!iconv_errno) { + iconv = NULL; + iconv_open = NULL; + iconv_close = NULL; + } } } } diff --git a/src/worksp/extradlls/README.TXT b/src/worksp/extradlls/README.TXT index 22b7000219..e077778cb9 100644 --- a/src/worksp/extradlls/README.TXT +++ b/src/worksp/extradlls/README.TXT @@ -2,16 +2,3 @@ This directory contains extra DLLs that are needed for running PLT Scheme. The DLL files are moved into the PLT folder by plt/src/mzscheme/dynsrc/mkmzdyn.bat which is, in turn, called by the MSVC projects. - ----------------------------------------------------------------------- -uniplt_xxxxxxx.dll - -This DLL is really Microsoft's UnicoWS.dll. Microsoft allows -redistribution of this DLL, but discourages installing it into the -system folder. So, we rename it (and version-mangle the name) so that -it can be installed into the system folder without conflicts. - -This DLL is only loaded by MzScheme/MrEd under Windows 95/98/Me. It's -actually not needed at all under Windows NT/2000/XP. - ----------------------------------------------------------------------- diff --git a/src/worksp/extradlls/uniplt_xxxxxxx.dll b/src/worksp/extradlls/UnicoWS.dll similarity index 100% rename from src/worksp/extradlls/uniplt_xxxxxxx.dll rename to src/worksp/extradlls/UnicoWS.dll diff --git a/src/worksp/extradlls/iconv.dll b/src/worksp/extradlls/iconv.dll new file mode 100644 index 0000000000..ef1baefdec Binary files /dev/null and b/src/worksp/extradlls/iconv.dll differ diff --git a/src/worksp/extradlls/libeay32.dll b/src/worksp/extradlls/libeay32.dll new file mode 100644 index 0000000000..4a00a2b06f Binary files /dev/null and b/src/worksp/extradlls/libeay32.dll differ diff --git a/src/worksp/extradlls/ssleay32.dll b/src/worksp/extradlls/ssleay32.dll new file mode 100644 index 0000000000..7ee117be29 Binary files /dev/null and b/src/worksp/extradlls/ssleay32.dll differ diff --git a/src/worksp/mzscheme/uniplt.c b/src/worksp/mzscheme/uniplt.c index e94a813380..934d5b7e15 100644 --- a/src/worksp/mzscheme/uniplt.c +++ b/src/worksp/mzscheme/uniplt.c @@ -14,8 +14,7 @@ HMODULE LoadUnicowsProc(void) { char *s; - /* Versioning should replace the "xxxxxxx" */ - s = scheme_get_dll_path("uniplt_xxxxxxx.dll"); + s = scheme_get_dll_path("UnicoWS.dll"); return LoadLibrary(s); }