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)