Remove ___lc_codepage_func dependency in mingwex git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@4314 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index 22076a7..a73ae4c 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am
@@ -200,6 +200,7 @@ misc/mingw_matherr.c \ misc/mb_wc_common.h \ misc/mingw_getsp.S \ + misc/mingw_get_codepage.c \ misc/strsafe.c \ misc/mempcpy.c misc/wmempcpy.c \ misc/alarm.c misc/basename.c misc/btowc.c misc/_ctime32.c misc/ctime.c \
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in index f3a6961..e8f447a 100644 --- a/mingw-w64-crt/Makefile.in +++ b/mingw-w64-crt/Makefile.in
@@ -390,17 +390,17 @@ math/tanhl.c math/tgamma.c math/tgammaf.c math/tgammal.c \ math/trunc.c math/truncf.c math/truncl.c math/cossin.c \ misc/mingw_matherr.c misc/mb_wc_common.h misc/mingw_getsp.S \ - misc/strsafe.c misc/mempcpy.c misc/wmempcpy.c misc/alarm.c \ - misc/basename.c misc/btowc.c misc/_ctime32.c misc/ctime.c \ - misc/delay-f.c misc/delayimp.c misc/delay-n.c \ - misc/difftime32.c misc/difftime64.c misc/difftime.c \ - misc/dirent.c misc/dirname.c misc/execv.c misc/execve.c \ - misc/execvp.c misc/execvpe.c misc/feclearexcept.c \ - misc/fegetenv.c misc/fegetexceptflag.c misc/fegetround.c \ - misc/feholdexcept.c misc/feraiseexcept.c misc/fesetenv.c \ - misc/fesetexceptflag.c misc/fesetround.c misc/fetestexcept.c \ - misc/feupdateenv.c misc/ftruncate.c misc/fwide.c \ - misc/getlogin.c misc/getopt.c misc/gettimeofday.c \ + misc/mingw_get_codepage.c misc/strsafe.c misc/mempcpy.c \ + misc/wmempcpy.c misc/alarm.c misc/basename.c misc/btowc.c \ + misc/_ctime32.c misc/ctime.c misc/delay-f.c misc/delayimp.c \ + misc/delay-n.c misc/difftime32.c misc/difftime64.c \ + misc/difftime.c misc/dirent.c misc/dirname.c misc/execv.c \ + misc/execve.c misc/execvp.c misc/execvpe.c \ + misc/feclearexcept.c misc/fegetenv.c misc/fegetexceptflag.c \ + misc/fegetround.c misc/feholdexcept.c misc/feraiseexcept.c \ + misc/fesetenv.c misc/fesetexceptflag.c misc/fesetround.c \ + misc/fetestexcept.c misc/feupdateenv.c misc/ftruncate.c \ + misc/fwide.c misc/getlogin.c misc/getopt.c misc/gettimeofday.c \ misc/_gmtime32.c misc/gmtime.c misc/imaxabs.c misc/imaxdiv.c \ misc/isblank.c misc/iswblank.c misc/_localtime32.c \ misc/localtime.c misc/mbrtowc.c misc/mbsinit.c \ @@ -753,6 +753,7 @@ math/lib32_libmingwex_a-cossin.$(OBJEXT) \ misc/lib32_libmingwex_a-mingw_matherr.$(OBJEXT) \ misc/lib32_libmingwex_a-mingw_getsp.$(OBJEXT) \ + misc/lib32_libmingwex_a-mingw_get_codepage.$(OBJEXT) \ misc/lib32_libmingwex_a-strsafe.$(OBJEXT) \ misc/lib32_libmingwex_a-mempcpy.$(OBJEXT) \ misc/lib32_libmingwex_a-wmempcpy.$(OBJEXT) \ @@ -1358,17 +1359,17 @@ math/tanhl.c math/tgamma.c math/tgammaf.c math/tgammal.c \ math/trunc.c math/truncf.c math/truncl.c math/cossin.c \ misc/mingw_matherr.c misc/mb_wc_common.h misc/mingw_getsp.S \ - misc/strsafe.c misc/mempcpy.c misc/wmempcpy.c misc/alarm.c \ - misc/basename.c misc/btowc.c misc/_ctime32.c misc/ctime.c \ - misc/delay-f.c misc/delayimp.c misc/delay-n.c \ - misc/difftime32.c misc/difftime64.c misc/difftime.c \ - misc/dirent.c misc/dirname.c misc/execv.c misc/execve.c \ - misc/execvp.c misc/execvpe.c misc/feclearexcept.c \ - misc/fegetenv.c misc/fegetexceptflag.c misc/fegetround.c \ - misc/feholdexcept.c misc/feraiseexcept.c misc/fesetenv.c \ - misc/fesetexceptflag.c misc/fesetround.c misc/fetestexcept.c \ - misc/feupdateenv.c misc/ftruncate.c misc/fwide.c \ - misc/getlogin.c misc/getopt.c misc/gettimeofday.c \ + misc/mingw_get_codepage.c misc/strsafe.c misc/mempcpy.c \ + misc/wmempcpy.c misc/alarm.c misc/basename.c misc/btowc.c \ + misc/_ctime32.c misc/ctime.c misc/delay-f.c misc/delayimp.c \ + misc/delay-n.c misc/difftime32.c misc/difftime64.c \ + misc/difftime.c misc/dirent.c misc/dirname.c misc/execv.c \ + misc/execve.c misc/execvp.c misc/execvpe.c \ + misc/feclearexcept.c misc/fegetenv.c misc/fegetexceptflag.c \ + misc/fegetround.c misc/feholdexcept.c misc/feraiseexcept.c \ + misc/fesetenv.c misc/fesetexceptflag.c misc/fesetround.c \ + misc/fetestexcept.c misc/feupdateenv.c misc/ftruncate.c \ + misc/fwide.c misc/getlogin.c misc/getopt.c misc/gettimeofday.c \ misc/_gmtime32.c misc/gmtime.c misc/imaxabs.c misc/imaxdiv.c \ misc/isblank.c misc/iswblank.c misc/_localtime32.c \ misc/localtime.c misc/mbrtowc.c misc/mbsinit.c \ @@ -1728,6 +1729,7 @@ math/lib64_libmingwex_a-cossin.$(OBJEXT) \ misc/lib64_libmingwex_a-mingw_matherr.$(OBJEXT) \ misc/lib64_libmingwex_a-mingw_getsp.$(OBJEXT) \ + misc/lib64_libmingwex_a-mingw_get_codepage.$(OBJEXT) \ misc/lib64_libmingwex_a-strsafe.$(OBJEXT) \ misc/lib64_libmingwex_a-mempcpy.$(OBJEXT) \ misc/lib64_libmingwex_a-wmempcpy.$(OBJEXT) \ @@ -3291,6 +3293,7 @@ misc/mingw_matherr.c \ misc/mb_wc_common.h \ misc/mingw_getsp.S \ + misc/mingw_get_codepage.c \ misc/strsafe.c \ misc/mempcpy.c misc/wmempcpy.c \ misc/alarm.c misc/basename.c misc/btowc.c misc/_ctime32.c misc/ctime.c \ @@ -5153,6 +5156,8 @@ misc/$(DEPDIR)/$(am__dirstamp) misc/lib32_libmingwex_a-mingw_getsp.$(OBJEXT): misc/$(am__dirstamp) \ misc/$(DEPDIR)/$(am__dirstamp) +misc/lib32_libmingwex_a-mingw_get_codepage.$(OBJEXT): \ + misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp) misc/lib32_libmingwex_a-strsafe.$(OBJEXT): misc/$(am__dirstamp) \ misc/$(DEPDIR)/$(am__dirstamp) misc/lib32_libmingwex_a-mempcpy.$(OBJEXT): misc/$(am__dirstamp) \ @@ -6564,6 +6569,8 @@ misc/$(DEPDIR)/$(am__dirstamp) misc/lib64_libmingwex_a-mingw_getsp.$(OBJEXT): misc/$(am__dirstamp) \ misc/$(DEPDIR)/$(am__dirstamp) +misc/lib64_libmingwex_a-mingw_get_codepage.$(OBJEXT): \ + misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp) misc/lib64_libmingwex_a-strsafe.$(OBJEXT): misc/$(am__dirstamp) \ misc/$(DEPDIR)/$(am__dirstamp) misc/lib64_libmingwex_a-mempcpy.$(OBJEXT): misc/$(am__dirstamp) \ @@ -9063,6 +9070,7 @@ -rm -f misc/lib32_libmingwex_a-mempcpy.$(OBJEXT) -rm -f misc/lib32_libmingwex_a-mingw-aligned-malloc.$(OBJEXT) -rm -f misc/lib32_libmingwex_a-mingw-fseek.$(OBJEXT) + -rm -f misc/lib32_libmingwex_a-mingw_get_codepage.$(OBJEXT) -rm -f misc/lib32_libmingwex_a-mingw_getsp.$(OBJEXT) -rm -f misc/lib32_libmingwex_a-mingw_matherr.$(OBJEXT) -rm -f misc/lib32_libmingwex_a-mingw_mbwc_convert.$(OBJEXT) @@ -9160,6 +9168,7 @@ -rm -f misc/lib64_libmingwex_a-mempcpy.$(OBJEXT) -rm -f misc/lib64_libmingwex_a-mingw-aligned-malloc.$(OBJEXT) -rm -f misc/lib64_libmingwex_a-mingw-fseek.$(OBJEXT) + -rm -f misc/lib64_libmingwex_a-mingw_get_codepage.$(OBJEXT) -rm -f misc/lib64_libmingwex_a-mingw_getsp.$(OBJEXT) -rm -f misc/lib64_libmingwex_a-mingw_matherr.$(OBJEXT) -rm -f misc/lib64_libmingwex_a-mingw_mbwc_convert.$(OBJEXT) @@ -10556,6 +10565,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mempcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw-aligned-malloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw-fseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw_getsp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw_matherr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw_mbwc_convert.Po@am__quote@ @@ -10653,6 +10663,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mempcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw-aligned-malloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw-fseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw_getsp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw_matherr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw_mbwc_convert.Po@am__quote@ @@ -16499,6 +16510,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmingwex_a-mingw_matherr.obj `if test -f 'misc/mingw_matherr.c'; then $(CYGPATH_W) 'misc/mingw_matherr.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw_matherr.c'; fi` +misc/lib32_libmingwex_a-mingw_get_codepage.o: misc/mingw_get_codepage.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmingwex_a-mingw_get_codepage.o -MD -MP -MF misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Tpo -c -o misc/lib32_libmingwex_a-mingw_get_codepage.o `test -f 'misc/mingw_get_codepage.c' || echo '$(srcdir)/'`misc/mingw_get_codepage.c +@am__fastdepCC_TRUE@ $(am__mv) misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Tpo misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc/mingw_get_codepage.c' object='misc/lib32_libmingwex_a-mingw_get_codepage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmingwex_a-mingw_get_codepage.o `test -f 'misc/mingw_get_codepage.c' || echo '$(srcdir)/'`misc/mingw_get_codepage.c + +misc/lib32_libmingwex_a-mingw_get_codepage.obj: misc/mingw_get_codepage.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmingwex_a-mingw_get_codepage.obj -MD -MP -MF misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Tpo -c -o misc/lib32_libmingwex_a-mingw_get_codepage.obj `if test -f 'misc/mingw_get_codepage.c'; then $(CYGPATH_W) 'misc/mingw_get_codepage.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw_get_codepage.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Tpo misc/$(DEPDIR)/lib32_libmingwex_a-mingw_get_codepage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc/mingw_get_codepage.c' object='misc/lib32_libmingwex_a-mingw_get_codepage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmingwex_a-mingw_get_codepage.obj `if test -f 'misc/mingw_get_codepage.c'; then $(CYGPATH_W) 'misc/mingw_get_codepage.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw_get_codepage.c'; fi` + misc/lib32_libmingwex_a-strsafe.o: misc/strsafe.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmingwex_a-strsafe.o -MD -MP -MF misc/$(DEPDIR)/lib32_libmingwex_a-strsafe.Tpo -c -o misc/lib32_libmingwex_a-strsafe.o `test -f 'misc/strsafe.c' || echo '$(srcdir)/'`misc/strsafe.c @am__fastdepCC_TRUE@ $(am__mv) misc/$(DEPDIR)/lib32_libmingwex_a-strsafe.Tpo misc/$(DEPDIR)/lib32_libmingwex_a-strsafe.Po @@ -24885,6 +24910,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmingwex_a-mingw_matherr.obj `if test -f 'misc/mingw_matherr.c'; then $(CYGPATH_W) 'misc/mingw_matherr.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw_matherr.c'; fi` +misc/lib64_libmingwex_a-mingw_get_codepage.o: misc/mingw_get_codepage.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmingwex_a-mingw_get_codepage.o -MD -MP -MF misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Tpo -c -o misc/lib64_libmingwex_a-mingw_get_codepage.o `test -f 'misc/mingw_get_codepage.c' || echo '$(srcdir)/'`misc/mingw_get_codepage.c +@am__fastdepCC_TRUE@ $(am__mv) misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Tpo misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc/mingw_get_codepage.c' object='misc/lib64_libmingwex_a-mingw_get_codepage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmingwex_a-mingw_get_codepage.o `test -f 'misc/mingw_get_codepage.c' || echo '$(srcdir)/'`misc/mingw_get_codepage.c + +misc/lib64_libmingwex_a-mingw_get_codepage.obj: misc/mingw_get_codepage.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmingwex_a-mingw_get_codepage.obj -MD -MP -MF misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Tpo -c -o misc/lib64_libmingwex_a-mingw_get_codepage.obj `if test -f 'misc/mingw_get_codepage.c'; then $(CYGPATH_W) 'misc/mingw_get_codepage.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw_get_codepage.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Tpo misc/$(DEPDIR)/lib64_libmingwex_a-mingw_get_codepage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc/mingw_get_codepage.c' object='misc/lib64_libmingwex_a-mingw_get_codepage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmingwex_a-mingw_get_codepage.obj `if test -f 'misc/mingw_get_codepage.c'; then $(CYGPATH_W) 'misc/mingw_get_codepage.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw_get_codepage.c'; fi` + misc/lib64_libmingwex_a-strsafe.o: misc/strsafe.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmingwex_a-strsafe.o -MD -MP -MF misc/$(DEPDIR)/lib64_libmingwex_a-strsafe.Tpo -c -o misc/lib64_libmingwex_a-strsafe.o `test -f 'misc/strsafe.c' || echo '$(srcdir)/'`misc/strsafe.c @am__fastdepCC_TRUE@ $(am__mv) misc/$(DEPDIR)/lib64_libmingwex_a-strsafe.Tpo misc/$(DEPDIR)/lib64_libmingwex_a-strsafe.Po
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c index 51954a8..60ee66d 100644 --- a/mingw-w64-crt/crt/crtexe.c +++ b/mingw-w64-crt/crt/crtexe.c
@@ -420,42 +420,14 @@ #endif } -extern const char * -__mingw_enum_import_library_names (int i); +HANDLE __mingw_get_msvcrt_handle(void); static void __cdecl __mingw_prepare_except_for_msvcr80_and_higher (void) { _invalid_parameter_handler (*fIPH)(_invalid_parameter_handler) = NULL; - int i = 0; - const char *dllname; - HMODULE hmsv = NULL; - while ((dllname = __mingw_enum_import_library_names (i)) != NULL) - { - /* We don't use here strnicmp to avoid its dependency. - See if DLL-name begins with "msvcr" and is followed by - a "t" or a digit. */ - if ((dllname[0] != 'm' && dllname[0] != 'M') - || (dllname[1] != 's' && dllname[1] != 'S') - || (dllname[2] != 'v' && dllname[2] != 'V') - || (dllname[3] != 'c' && dllname[3] != 'C') - || (dllname[4] != 'r' && dllname[4] != 'R') - || (dllname[5] != 't' && dllname[5] != 'T' - && dllname[5] < '0' && dllname[5] > '9')) - { - ++i; - continue; - } - hmsv = GetModuleHandleA (dllname); - fIPH = (_invalid_parameter_handler (*)(_invalid_parameter_handler)) - GetProcAddress (hmsv, "_set_invalid_parameter_handler"); - if (fIPH) - break; - ++i; - } - if (!fIPH) - return; + fIPH = (void*)GetProcAddress (__mingw_get_msvcrt_handle(), "_set_invalid_parameter_handler"); if (fIPH) (*fIPH)(__mingw_invalidParameterHandler); }
diff --git a/mingw-w64-crt/crt/pesect.c b/mingw-w64-crt/crt/pesect.c index 481b548..8f49e6b 100644 --- a/mingw-w64-crt/crt/pesect.c +++ b/mingw-w64-crt/crt/pesect.c
@@ -221,10 +221,38 @@ break; if (i <= 0) - return (char *) (pImageBase + importDesc->Name); + return (char *) (pImageBase + importDesc->Name); --i; importDesc++; } return NULL; } + +HMODULE __mingw_get_msvcrt_handle(void); +HMODULE __mingw_get_msvcrt_handle(void) +{ + static HANDLE msvcrt_handle; + + if(!msvcrt_handle) { + const char *lib_name; + int i = 0; + + while ((lib_name = __mingw_enum_import_library_names (i++))) { + if((lib_name[0] == 'm' || lib_name[0] == 'M') + && (lib_name[1] == 's' || lib_name[1] == 'S') + && (lib_name[2] == 'v' || lib_name[2] == 'V') + && (lib_name[3] == 'c' || lib_name[3] == 'C') + && (lib_name[4] == 'r' || lib_name[4] == 'R') + && (lib_name[5] == 't' || lib_name[5] == 'T' || ('0' <= lib_name[5] && lib_name[5] <= '9'))) + break; + } + + if(lib_name) + msvcrt_handle = GetModuleHandleA(lib_name); + if(!msvcrt_handle) + msvcrt_handle = LoadLibraryW(L"msvcrt.dll"); + } + + return msvcrt_handle; +}
diff --git a/mingw-w64-crt/misc/btowc.c b/mingw-w64-crt/misc/btowc.c index 02db9f2..9535066 100644 --- a/mingw-w64-crt/misc/btowc.c +++ b/mingw-w64-crt/misc/btowc.c
@@ -19,7 +19,7 @@ { unsigned char ch = c; wchar_t wc = WEOF; - MultiByteToWideChar (get_codepage(), MB_ERR_INVALID_CHARS, + MultiByteToWideChar (__mingw_get_codepage(), MB_ERR_INVALID_CHARS, (char*)&ch, 1, &wc, 1); return wc; }
diff --git a/mingw-w64-crt/misc/mb_wc_common.h b/mingw-w64-crt/misc/mb_wc_common.h index 50794ea..bbdb969 100644 --- a/mingw-w64-crt/misc/mb_wc_common.h +++ b/mingw-w64-crt/misc/mb_wc_common.h
@@ -5,10 +5,5 @@ */ #include <_mingw.h> -_CRTIMP unsigned int ___lc_codepage_func(void); -static inline -unsigned int get_codepage (void) -{ - return ___lc_codepage_func(); -} +extern unsigned int (__cdecl *__mingw_get_codepage)(void);
diff --git a/mingw-w64-crt/misc/mbrtowc.c b/mingw-w64-crt/misc/mbrtowc.c index d748eb0..9226c82 100644 --- a/mingw-w64-crt/misc/mbrtowc.c +++ b/mingw-w64-crt/misc/mbrtowc.c
@@ -101,7 +101,7 @@ wchar_t* dst = pwc ? pwc : &byte_bucket; return (size_t) __mbrtowc_cp (dst, s, n, ps ? ps : &internal_mbstate, - get_codepage(), MB_CUR_MAX); + __mingw_get_codepage(), MB_CUR_MAX); } @@ -113,7 +113,7 @@ size_t n = 0; static mbstate_t internal_mbstate = 0; mbstate_t* internal_ps = ps ? ps : &internal_mbstate; - const unsigned int cp = get_codepage(); + const unsigned int cp = __mingw_get_codepage(); const unsigned int mb_max = MB_CUR_MAX; if ( src == NULL || *src == NULL ) /* undefined behavior */ @@ -157,5 +157,5 @@ static mbstate_t s_mbstate = 0; wchar_t byte_bucket = 0; return __mbrtowc_cp (&byte_bucket, s, n, (ps) ? ps : &s_mbstate, - get_codepage(), MB_CUR_MAX); + __mingw_get_codepage(), MB_CUR_MAX); }
diff --git a/mingw-w64-crt/misc/mingw_get_codepage.c b/mingw-w64-crt/misc/mingw_get_codepage.c new file mode 100644 index 0000000..eb899c4 --- /dev/null +++ b/mingw-w64-crt/misc/mingw_get_codepage.c
@@ -0,0 +1,38 @@ +#include <windows.h> +#include <locale.h> + +#include "mb_wc_common.h" + +static unsigned int *msvcrt__lc_codepage; +static unsigned int __cdecl msvcrt__lc_codepage_func(void) +{ + return *msvcrt__lc_codepage; +} + +static unsigned int __cdecl setlocale_codepage_hack(void) +{ + /* locale :: "lang[_country[.code_page]]" | ".code_page" */ + const char *cp_str = strchr (setlocale(LC_CTYPE, NULL), '.'); + return cp_str ? atoi(cp_str + 1) : 0; +} + +HANDLE __mingw_get_msvcrt_handle(void); + +static unsigned int __cdecl init_codepage_func(void) +{ + HMODULE msvcrt = __mingw_get_msvcrt_handle(); + + if(msvcrt) { + __mingw_get_codepage = (void*)GetProcAddress(msvcrt, "___lc_codepage_func"); + if(__mingw_get_codepage) + return __mingw_get_codepage(); + + msvcrt__lc_codepage = (unsigned int*)GetProcAddress(msvcrt, "__lc_codepage"); + if(msvcrt__lc_codepage) + return (__mingw_get_codepage = msvcrt__lc_codepage_func)(); + } + + return (__mingw_get_codepage = setlocale_codepage_hack)(); +} + +unsigned int (__cdecl *__mingw_get_codepage)(void) = init_codepage_func;
diff --git a/mingw-w64-crt/misc/mingw_output_format.c b/mingw-w64-crt/misc/mingw_output_format.c index 6c69e34..a04d86e 100644 --- a/mingw-w64-crt/misc/mingw_output_format.c +++ b/mingw-w64-crt/misc/mingw_output_format.c
@@ -1,6 +1,8 @@ #include <windows.h> #include <stdio.h> +HANDLE __mingw_get_msvcrt_handle(void); + static unsigned int last_value = 0; typedef unsigned int (*f_get_output_format)(void); typedef unsigned int (*f_set_output_format)(unsigned int); @@ -8,15 +10,11 @@ static int call_set_output_format(unsigned int _Format) { f_set_output_format sof; - HMODULE lib = LoadLibrary ("msvcrt.dll"); - if (!lib) - return 0; - sof = (f_set_output_format) GetProcAddress (lib, "_set_output_format"); + sof = (f_set_output_format) GetProcAddress (__mingw_get_msvcrt_handle(), "_set_output_format"); if (sof) { last_value = (*sof)(_Format); } - FreeLibrary(lib); if (!sof) return 0; return 1; } @@ -24,15 +22,11 @@ static int call_get_output_format(void) { f_get_output_format sof; - HMODULE lib = LoadLibrary ("msvcrt.dll"); - if (!lib) - return 0; - sof = (f_get_output_format) GetProcAddress (lib, "_get_output_format"); + sof = (f_get_output_format) GetProcAddress (__mingw_get_msvcrt_handle(), "_get_output_format"); if (sof) { last_value = (*sof)(); } - FreeLibrary(lib); if (!sof) return 0; return 1; }
diff --git a/mingw-w64-crt/misc/wcrtomb.c b/mingw-w64-crt/misc/wcrtomb.c index 1e32c26..cc12fbb 100644 --- a/mingw-w64-crt/misc/wcrtomb.c +++ b/mingw-w64-crt/misc/wcrtomb.c
@@ -49,7 +49,7 @@ { char byte_bucket [MB_LEN_MAX]; char* tmp_dst = dst ? dst : byte_bucket; - return (size_t)__wcrtomb_cp (tmp_dst, wc, get_codepage (), + return (size_t)__wcrtomb_cp (tmp_dst, wc, __mingw_get_codepage (), MB_CUR_MAX); } @@ -58,7 +58,7 @@ { int ret = 0; size_t n = 0; - const unsigned int cp = get_codepage(); + const unsigned int cp = __mingw_get_codepage(); const unsigned int mb_max = MB_CUR_MAX; const wchar_t *pwc = *src;
diff --git a/mingw-w64-crt/misc/wcstof.c b/mingw-w64-crt/misc/wcstof.c index 482297b..5dd16e8 100644 --- a/mingw-w64-crt/misc/wcstof.c +++ b/mingw-w64-crt/misc/wcstof.c
@@ -23,7 +23,7 @@ char * cse; unsigned int i; float ret; - const unsigned int cp = get_codepage (); + const unsigned int cp = __mingw_get_codepage(); /* Allocate enough room for (possibly) mb chars */ cs = (char *) malloc ((wcslen(wcs)+1) * MB_CUR_MAX);
diff --git a/mingw-w64-crt/misc/wcstold.c b/mingw-w64-crt/misc/wcstold.c index 1145d69..3cedd22 100644 --- a/mingw-w64-crt/misc/wcstold.c +++ b/mingw-w64-crt/misc/wcstold.c
@@ -31,7 +31,7 @@ char * cse; unsigned int i; long double ret; - const unsigned int cp = get_codepage (); + const unsigned int cp = __mingw_get_codepage(); /* Allocate enough room for (possibly) mb chars */ cs = (char *) malloc ((wcslen(wcs)+1) * MB_CUR_MAX);
diff --git a/mingw-w64-crt/misc/wctob.c b/mingw-w64-crt/misc/wctob.c index 22362ba..2f548fc 100644 --- a/mingw-w64-crt/misc/wctob.c +++ b/mingw-w64-crt/misc/wctob.c
@@ -19,7 +19,7 @@ wchar_t w = wc; char c; int invalid_char = 0; - if (!WideCharToMultiByte (get_codepage(), + if (!WideCharToMultiByte (__mingw_get_codepage(), 0 /* Is this correct flag? */, &w, 1, &c, 1, NULL, &invalid_char) || invalid_char)