Remove ___lc_codepage_func dependency in mingwex



git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/branches/releases/v1.0@4350 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 8265e4b..fe1443d 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -183,6 +183,7 @@
   math/truncl.c       \
   \
   misc/mb_wc_common.h \
+  misc/mingw_get_codepage.c \
   misc/mingw_getsp.S  \
   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      \
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in
index 4d360c3..10b19ed 100644
--- a/mingw-w64-crt/Makefile.in
+++ b/mingw-w64-crt/Makefile.in
@@ -318,17 +318,17 @@
 	math/sinhf.c math/sinhl.c math/sqrtf.c math/sqrtl.c \
 	math/tanf.c math/tanhf.c math/tanhl.c math/tgamma.c \
 	math/tgammaf.c math/tgammal.c math/trunc.c math/truncf.c \
-	math/truncl.c misc/mb_wc_common.h misc/mingw_getsp.S \
-	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 \
+	math/truncl.c misc/mb_wc_common.h misc/mingw_get_codepage.c \
+	misc/mingw_getsp.S 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 \
@@ -667,6 +667,7 @@
 	math/lib32_libmingwex_a-trunc.$(OBJEXT) \
 	math/lib32_libmingwex_a-truncf.$(OBJEXT) \
 	math/lib32_libmingwex_a-truncl.$(OBJEXT) \
+	misc/lib32_libmingwex_a-mingw_get_codepage.$(OBJEXT) \
 	misc/lib32_libmingwex_a-mingw_getsp.$(OBJEXT) \
 	misc/lib32_libmingwex_a-alarm.$(OBJEXT) \
 	misc/lib32_libmingwex_a-basename.$(OBJEXT) \
@@ -1226,17 +1227,17 @@
 	math/sinhf.c math/sinhl.c math/sqrtf.c math/sqrtl.c \
 	math/tanf.c math/tanhf.c math/tanhl.c math/tgamma.c \
 	math/tgammaf.c math/tgammal.c math/trunc.c math/truncf.c \
-	math/truncl.c misc/mb_wc_common.h misc/mingw_getsp.S \
-	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 \
+	math/truncl.c misc/mb_wc_common.h misc/mingw_get_codepage.c \
+	misc/mingw_getsp.S 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 \
@@ -1582,6 +1583,7 @@
 	math/lib64_libmingwex_a-trunc.$(OBJEXT) \
 	math/lib64_libmingwex_a-truncf.$(OBJEXT) \
 	math/lib64_libmingwex_a-truncl.$(OBJEXT) \
+	misc/lib64_libmingwex_a-mingw_get_codepage.$(OBJEXT) \
 	misc/lib64_libmingwex_a-mingw_getsp.$(OBJEXT) \
 	misc/lib64_libmingwex_a-alarm.$(OBJEXT) \
 	misc/lib64_libmingwex_a-basename.$(OBJEXT) \
@@ -2411,6 +2413,7 @@
   math/truncl.c       \
   \
   misc/mb_wc_common.h \
+  misc/mingw_get_codepage.c \
   misc/mingw_getsp.S  \
   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      \
@@ -3894,6 +3897,8 @@
 misc/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) misc/$(DEPDIR)
 	@: > misc/$(DEPDIR)/$(am__dirstamp)
+misc/lib32_libmingwex_a-mingw_get_codepage.$(OBJEXT):  \
+	misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib32_libmingwex_a-mingw_getsp.$(OBJEXT): misc/$(am__dirstamp) \
 	misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib32_libmingwex_a-alarm.$(OBJEXT): misc/$(am__dirstamp) \
@@ -5231,6 +5236,8 @@
 	math/$(DEPDIR)/$(am__dirstamp)
 math/lib64_libmingwex_a-truncl.$(OBJEXT): math/$(am__dirstamp) \
 	math/$(DEPDIR)/$(am__dirstamp)
+misc/lib64_libmingwex_a-mingw_get_codepage.$(OBJEXT):  \
+	misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib64_libmingwex_a-mingw_getsp.$(OBJEXT): misc/$(am__dirstamp) \
 	misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib64_libmingwex_a-alarm.$(OBJEXT): misc/$(am__dirstamp) \
@@ -6957,6 +6964,7 @@
 	-rm -f misc/lib32_libmingwex_a-mbsinit.$(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_output_format.$(OBJEXT)
 	-rm -f misc/lib32_libmingwex_a-mingw_usleep.$(OBJEXT)
@@ -7045,6 +7053,7 @@
 	-rm -f misc/lib64_libmingwex_a-mbsinit.$(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_output_format.$(OBJEXT)
 	-rm -f misc/lib64_libmingwex_a-mingw_usleep.$(OBJEXT)
@@ -8202,6 +8211,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mbsinit.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_output_format.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-mingw_usleep.Po@am__quote@
@@ -8290,6 +8300,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mbsinit.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_output_format.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-mingw_usleep.Po@am__quote@
@@ -13908,6 +13919,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 math/lib32_libmingwex_a-truncl.obj `if test -f 'math/truncl.c'; then $(CYGPATH_W) 'math/truncl.c'; else $(CYGPATH_W) '$(srcdir)/math/truncl.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-alarm.o: misc/alarm.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmingwex_a-alarm.o -MD -MP -MF misc/$(DEPDIR)/lib32_libmingwex_a-alarm.Tpo -c -o misc/lib32_libmingwex_a-alarm.o `test -f 'misc/alarm.c' || echo '$(srcdir)/'`misc/alarm.c
 @am__fastdepCC_TRUE@	$(am__mv) misc/$(DEPDIR)/lib32_libmingwex_a-alarm.Tpo misc/$(DEPDIR)/lib32_libmingwex_a-alarm.Po
@@ -21804,6 +21829,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 math/lib64_libmingwex_a-truncl.obj `if test -f 'math/truncl.c'; then $(CYGPATH_W) 'math/truncl.c'; else $(CYGPATH_W) '$(srcdir)/math/truncl.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-alarm.o: misc/alarm.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmingwex_a-alarm.o -MD -MP -MF misc/$(DEPDIR)/lib64_libmingwex_a-alarm.Tpo -c -o misc/lib64_libmingwex_a-alarm.o `test -f 'misc/alarm.c' || echo '$(srcdir)/'`misc/alarm.c
 @am__fastdepCC_TRUE@	$(am__mv) misc/$(DEPDIR)/lib64_libmingwex_a-alarm.Tpo misc/$(DEPDIR)/lib64_libmingwex_a-alarm.Po
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
index bf586a3..05726a2 100644
--- a/mingw-w64-crt/crt/crtexe.c
+++ b/mingw-w64-crt/crt/crtexe.c
@@ -491,21 +491,14 @@
 #endif
 }
 
+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;
-  HMODULE hmsv = GetModuleHandleA ("msvcr80.dll");
-  if(!hmsv)
-    hmsv = GetModuleHandleA ("msvcr70.dll");
-  if (!hmsv)
-    hmsv = GetModuleHandleA ("msvcrt.dll");
-  if (!hmsv)
-    hmsv = LoadLibraryA ("msvcrt.dll");
-  if (!hmsv)
-    return;
-  fIPH = (_invalid_parameter_handler (*)(_invalid_parameter_handler))
-    GetProcAddress (hmsv, "_set_invalid_parameter_handler");
+
+  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 8b83371..12478c8 100644
--- a/mingw-w64-crt/crt/pesect.c
+++ b/mingw-w64-crt/crt/pesect.c
@@ -182,3 +182,75 @@
     return FALSE;
   return (pSection->Characteristics & IMAGE_SCN_MEM_WRITE) == 0;
 }
+
+const char *
+__mingw_enum_import_library_names (int);
+
+const char *
+__mingw_enum_import_library_names (int i)
+{
+  PBYTE pImageBase;
+  PIMAGE_NT_HEADERS pNTHeader;
+  PIMAGE_IMPORT_DESCRIPTOR importDesc;
+  PIMAGE_SECTION_HEADER pSection;
+  DWORD importsStartRVA;
+
+  pImageBase = (PBYTE) &__ImageBase;
+  if (! _ValidateImageBase (pImageBase))
+    return NULL;
+
+  pNTHeader = (PIMAGE_NT_HEADERS) (pImageBase + ((PIMAGE_DOS_HEADER) pImageBase)->e_lfanew);
+  
+  importsStartRVA = pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
+  if (!importsStartRVA)
+    return NULL;
+
+  pSection = _FindPESection (pImageBase, importsStartRVA);
+  if (!pSection)
+      return NULL;
+
+  importDesc = (PIMAGE_IMPORT_DESCRIPTOR) (pImageBase + importsStartRVA);
+  if (!importDesc)
+    return NULL;
+            
+  for (;;)
+    {
+      if (importDesc->TimeDateStamp == 0 && importDesc->Name == 0)
+        break;
+
+      if (i <= 0)
+       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 a6c6a43..58e9b2e 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_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 e7d6fcd..e30baa0 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;
 
diff --git a/mingw-w64-crt/misc/wcstold.c b/mingw-w64-crt/misc/wcstold.c
index 41d861f..79ec948 100644
--- a/mingw-w64-crt/misc/wcstold.c
+++ b/mingw-w64-crt/misc/wcstold.c
@@ -20,25 +20,12 @@
 #include <wchar.h>
 #include <stdlib.h>
 #include <string.h>
+#include "mb_wc_common.h"
 
 extern int __asctoe64(const char * __restrict__ ss,
 	       short unsigned int * __restrict__ y);
 
 
-static __inline__ unsigned int get_codepage (void)
-{
-  char* cp;
-
-  /*
-    locale :: "lang[_country[.code_page]]" 
-               | ".code_page"
-  */
-  if ((cp = strchr(setlocale(LC_CTYPE, NULL), '.')))
-    return atoi( cp + 1);
-  else
-    return 0;
-}
-
 long double wcstold (const wchar_t * __restrict__ wcs, wchar_t ** __restrict__ wcse)
 {
   char * cs;
@@ -50,7 +37,7 @@
     long double ld;
   } xx;
 
-  unsigned int cp = get_codepage ();   
+  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)