Added __lc_codepage_func wrapper to libmsvcrt.a and use __lc_codepage_func directly instead of __mingw_get_codepage extention.

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@5895 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index faa5f84..70fe7dd 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -119,6 +119,7 @@
 
 src_msvcrt=\
   misc/invalid_parameter_handler.c \
+  misc/lc_locale_func.c \
   secapi/_access_s.c \
   secapi/_cgets_s.c \
   secapi/_cgetws_s.c \
@@ -220,7 +221,7 @@
   misc/feupdateenv.c     misc/ftruncate.c             misc/fwide.c                misc/getlogin.c            misc/getopt.c         \
   misc/gettimeofday.c                                 misc/imaxabs.c              misc/imaxdiv.c             misc/isblank.c        \
   misc/iswblank.c                                     misc/mb_wc_common.h         misc/mbrtowc.c             misc/mbsinit.c        \
-  misc/mempcpy.c         misc/mingw-aligned-malloc.c  misc/mingw-fseek.c          misc/mingw_get_codepage.c  misc/mingw_getsp.S    \
+  misc/mempcpy.c         misc/mingw-aligned-malloc.c  misc/mingw-fseek.c          misc/mingw_getsp.S    \
   misc/mingw_matherr.c   misc/mingw_mbwc_convert.c    misc/mingw_output_format.c  misc/mingw_usleep.c        misc/mingw_wcstod.c   \
   misc/mingw_wcstof.c    misc/mingw_wcstold.c                                     misc/seterrno.c            misc/sleep.c          \
   misc/spawnv.c          misc/spawnve.c               misc/spawnvp.c              misc/spawnvpe.c            misc/strnlen.c        \
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in
index cf78d02..ffaa3be 100644
--- a/mingw-w64-crt/Makefile.in
+++ b/mingw-w64-crt/Makefile.in
@@ -592,15 +592,14 @@
 	misc/isblank.c misc/iswblank.c misc/mb_wc_common.h \
 	misc/mbrtowc.c misc/mbsinit.c misc/mempcpy.c \
 	misc/mingw-aligned-malloc.c misc/mingw-fseek.c \
-	misc/mingw_get_codepage.c misc/mingw_getsp.S \
-	misc/mingw_matherr.c misc/mingw_mbwc_convert.c \
-	misc/mingw_output_format.c misc/mingw_usleep.c \
-	misc/mingw_wcstod.c misc/mingw_wcstof.c misc/mingw_wcstold.c \
-	misc/seterrno.c misc/sleep.c misc/spawnv.c misc/spawnve.c \
-	misc/spawnvp.c misc/spawnvpe.c misc/strnlen.c misc/strsafe.c \
-	misc/strtoimax.c misc/strtold.c misc/strtoumax.c \
-	misc/tdelete.c misc/tfind.c misc/tsearch.c misc/twalk.c \
-	misc/uchar_c16rtomb.c misc/uchar_c32rtomb.c \
+	misc/mingw_getsp.S misc/mingw_matherr.c \
+	misc/mingw_mbwc_convert.c misc/mingw_output_format.c \
+	misc/mingw_usleep.c misc/mingw_wcstod.c misc/mingw_wcstof.c \
+	misc/mingw_wcstold.c misc/seterrno.c misc/sleep.c \
+	misc/spawnv.c misc/spawnve.c misc/spawnvp.c misc/spawnvpe.c \
+	misc/strnlen.c misc/strsafe.c misc/strtoimax.c misc/strtold.c \
+	misc/strtoumax.c misc/tdelete.c misc/tfind.c misc/tsearch.c \
+	misc/twalk.c misc/uchar_c16rtomb.c misc/uchar_c32rtomb.c \
 	misc/uchar_mbrtoc16.c misc/uchar_mbrtoc32.c misc/wassert.c \
 	misc/wcrtomb.c misc/wcsnlen.c misc/wcstof.c misc/wcstoimax.c \
 	misc/wcstold.c misc/wcstoumax.c misc/wctob.c misc/wctrans.c \
@@ -923,7 +922,6 @@
 	misc/lib32_libmingwex_a-mempcpy.$(OBJEXT) \
 	misc/lib32_libmingwex_a-mingw-aligned-malloc.$(OBJEXT) \
 	misc/lib32_libmingwex_a-mingw-fseek.$(OBJEXT) \
-	misc/lib32_libmingwex_a-mingw_get_codepage.$(OBJEXT) \
 	misc/lib32_libmingwex_a-mingw_getsp.$(OBJEXT) \
 	misc/lib32_libmingwex_a-mingw_matherr.$(OBJEXT) \
 	misc/lib32_libmingwex_a-mingw_mbwc_convert.$(OBJEXT) \
@@ -1068,21 +1066,22 @@
 lib32_libmoldname_a_OBJECTS = $(am_lib32_libmoldname_a_OBJECTS)
 lib32_libmsvcrt_a_LIBADD =
 am__lib32_libmsvcrt_a_SOURCES_DIST = misc/invalid_parameter_handler.c \
-	secapi/_access_s.c secapi/_cgets_s.c secapi/_cgetws_s.c \
-	secapi/_chsize_s.c secapi/_cprintf_s.c secapi/_cprintf_s_l.c \
-	secapi/_ctime32_s.c secapi/_ctime64_s.c secapi/_cwprintf_s.c \
-	secapi/_cwprintf_s_l.c secapi/_gmtime32_s.c \
-	secapi/_gmtime64_s.c secapi/_localtime32_s.c \
-	secapi/_localtime64_s.c secapi/_mktemp_s.c secapi/_strdate_s.c \
-	secapi/_strtime_s.c secapi/_umask_s.c secapi/_vcprintf_s.c \
-	secapi/_vcprintf_s_l.c secapi/_vcwprintf_s.c \
-	secapi/_vcwprintf_s_l.c secapi/_waccess_s.c \
-	secapi/_wasctime_s.c secapi/_wctime32_s.c secapi/_wctime64_s.c \
-	secapi/_wstrtime_s.c secapi/_wmktemp_s.c secapi/_wstrdate_s.c \
-	secapi/asctime_s.c secapi/memcpy_s.c secapi/vsprintf_s.c \
-	secapi/wmemcpy_s.c lib32/msvcrt.def.in
+	misc/lc_locale_func.c secapi/_access_s.c secapi/_cgets_s.c \
+	secapi/_cgetws_s.c secapi/_chsize_s.c secapi/_cprintf_s.c \
+	secapi/_cprintf_s_l.c secapi/_ctime32_s.c secapi/_ctime64_s.c \
+	secapi/_cwprintf_s.c secapi/_cwprintf_s_l.c \
+	secapi/_gmtime32_s.c secapi/_gmtime64_s.c \
+	secapi/_localtime32_s.c secapi/_localtime64_s.c \
+	secapi/_mktemp_s.c secapi/_strdate_s.c secapi/_strtime_s.c \
+	secapi/_umask_s.c secapi/_vcprintf_s.c secapi/_vcprintf_s_l.c \
+	secapi/_vcwprintf_s.c secapi/_vcwprintf_s_l.c \
+	secapi/_waccess_s.c secapi/_wasctime_s.c secapi/_wctime32_s.c \
+	secapi/_wctime64_s.c secapi/_wstrtime_s.c secapi/_wmktemp_s.c \
+	secapi/_wstrdate_s.c secapi/asctime_s.c secapi/memcpy_s.c \
+	secapi/vsprintf_s.c secapi/wmemcpy_s.c lib32/msvcrt.def.in
 am__objects_18 =  \
 	misc/lib32_libmsvcrt_a-invalid_parameter_handler.$(OBJEXT) \
+	misc/lib32_libmsvcrt_a-lc_locale_func.$(OBJEXT) \
 	secapi/lib32_libmsvcrt_a-_access_s.$(OBJEXT) \
 	secapi/lib32_libmsvcrt_a-_cgets_s.$(OBJEXT) \
 	secapi/lib32_libmsvcrt_a-_cgetws_s.$(OBJEXT) \
@@ -1689,15 +1688,14 @@
 	misc/isblank.c misc/iswblank.c misc/mb_wc_common.h \
 	misc/mbrtowc.c misc/mbsinit.c misc/mempcpy.c \
 	misc/mingw-aligned-malloc.c misc/mingw-fseek.c \
-	misc/mingw_get_codepage.c misc/mingw_getsp.S \
-	misc/mingw_matherr.c misc/mingw_mbwc_convert.c \
-	misc/mingw_output_format.c misc/mingw_usleep.c \
-	misc/mingw_wcstod.c misc/mingw_wcstof.c misc/mingw_wcstold.c \
-	misc/seterrno.c misc/sleep.c misc/spawnv.c misc/spawnve.c \
-	misc/spawnvp.c misc/spawnvpe.c misc/strnlen.c misc/strsafe.c \
-	misc/strtoimax.c misc/strtold.c misc/strtoumax.c \
-	misc/tdelete.c misc/tfind.c misc/tsearch.c misc/twalk.c \
-	misc/uchar_c16rtomb.c misc/uchar_c32rtomb.c \
+	misc/mingw_getsp.S misc/mingw_matherr.c \
+	misc/mingw_mbwc_convert.c misc/mingw_output_format.c \
+	misc/mingw_usleep.c misc/mingw_wcstod.c misc/mingw_wcstof.c \
+	misc/mingw_wcstold.c misc/seterrno.c misc/sleep.c \
+	misc/spawnv.c misc/spawnve.c misc/spawnvp.c misc/spawnvpe.c \
+	misc/strnlen.c misc/strsafe.c misc/strtoimax.c misc/strtold.c \
+	misc/strtoumax.c misc/tdelete.c misc/tfind.c misc/tsearch.c \
+	misc/twalk.c misc/uchar_c16rtomb.c misc/uchar_c32rtomb.c \
 	misc/uchar_mbrtoc16.c misc/uchar_mbrtoc32.c misc/wassert.c \
 	misc/wcrtomb.c misc/wcsnlen.c misc/wcstof.c misc/wcstoimax.c \
 	misc/wcstold.c misc/wcstoumax.c misc/wctob.c misc/wctrans.c \
@@ -2020,7 +2018,6 @@
 	misc/lib64_libmingwex_a-mempcpy.$(OBJEXT) \
 	misc/lib64_libmingwex_a-mingw-aligned-malloc.$(OBJEXT) \
 	misc/lib64_libmingwex_a-mingw-fseek.$(OBJEXT) \
-	misc/lib64_libmingwex_a-mingw_get_codepage.$(OBJEXT) \
 	misc/lib64_libmingwex_a-mingw_getsp.$(OBJEXT) \
 	misc/lib64_libmingwex_a-mingw_matherr.$(OBJEXT) \
 	misc/lib64_libmingwex_a-mingw_mbwc_convert.$(OBJEXT) \
@@ -2165,21 +2162,22 @@
 lib64_libmoldname_a_OBJECTS = $(am_lib64_libmoldname_a_OBJECTS)
 lib64_libmsvcrt_a_LIBADD =
 am__lib64_libmsvcrt_a_SOURCES_DIST = misc/invalid_parameter_handler.c \
-	secapi/_access_s.c secapi/_cgets_s.c secapi/_cgetws_s.c \
-	secapi/_chsize_s.c secapi/_cprintf_s.c secapi/_cprintf_s_l.c \
-	secapi/_ctime32_s.c secapi/_ctime64_s.c secapi/_cwprintf_s.c \
-	secapi/_cwprintf_s_l.c secapi/_gmtime32_s.c \
-	secapi/_gmtime64_s.c secapi/_localtime32_s.c \
-	secapi/_localtime64_s.c secapi/_mktemp_s.c secapi/_strdate_s.c \
-	secapi/_strtime_s.c secapi/_umask_s.c secapi/_vcprintf_s.c \
-	secapi/_vcprintf_s_l.c secapi/_vcwprintf_s.c \
-	secapi/_vcwprintf_s_l.c secapi/_waccess_s.c \
-	secapi/_wasctime_s.c secapi/_wctime32_s.c secapi/_wctime64_s.c \
-	secapi/_wstrtime_s.c secapi/_wmktemp_s.c secapi/_wstrdate_s.c \
-	secapi/asctime_s.c secapi/memcpy_s.c secapi/vsprintf_s.c \
-	secapi/wmemcpy_s.c lib64/msvcrt.def.in
+	misc/lc_locale_func.c secapi/_access_s.c secapi/_cgets_s.c \
+	secapi/_cgetws_s.c secapi/_chsize_s.c secapi/_cprintf_s.c \
+	secapi/_cprintf_s_l.c secapi/_ctime32_s.c secapi/_ctime64_s.c \
+	secapi/_cwprintf_s.c secapi/_cwprintf_s_l.c \
+	secapi/_gmtime32_s.c secapi/_gmtime64_s.c \
+	secapi/_localtime32_s.c secapi/_localtime64_s.c \
+	secapi/_mktemp_s.c secapi/_strdate_s.c secapi/_strtime_s.c \
+	secapi/_umask_s.c secapi/_vcprintf_s.c secapi/_vcprintf_s_l.c \
+	secapi/_vcwprintf_s.c secapi/_vcwprintf_s_l.c \
+	secapi/_waccess_s.c secapi/_wasctime_s.c secapi/_wctime32_s.c \
+	secapi/_wctime64_s.c secapi/_wstrtime_s.c secapi/_wmktemp_s.c \
+	secapi/_wstrdate_s.c secapi/asctime_s.c secapi/memcpy_s.c \
+	secapi/vsprintf_s.c secapi/wmemcpy_s.c lib64/msvcrt.def.in
 am__objects_47 =  \
 	misc/lib64_libmsvcrt_a-invalid_parameter_handler.$(OBJEXT) \
+	misc/lib64_libmsvcrt_a-lc_locale_func.$(OBJEXT) \
 	secapi/lib64_libmsvcrt_a-_access_s.$(OBJEXT) \
 	secapi/lib64_libmsvcrt_a-_cgets_s.$(OBJEXT) \
 	secapi/lib64_libmsvcrt_a-_cgetws_s.$(OBJEXT) \
@@ -3782,6 +3780,7 @@
 
 src_msvcrt = \
   misc/invalid_parameter_handler.c \
+  misc/lc_locale_func.c \
   secapi/_access_s.c \
   secapi/_cgets_s.c \
   secapi/_cgetws_s.c \
@@ -3882,7 +3881,7 @@
   misc/feupdateenv.c     misc/ftruncate.c             misc/fwide.c                misc/getlogin.c            misc/getopt.c         \
   misc/gettimeofday.c                                 misc/imaxabs.c              misc/imaxdiv.c             misc/isblank.c        \
   misc/iswblank.c                                     misc/mb_wc_common.h         misc/mbrtowc.c             misc/mbsinit.c        \
-  misc/mempcpy.c         misc/mingw-aligned-malloc.c  misc/mingw-fseek.c          misc/mingw_get_codepage.c  misc/mingw_getsp.S    \
+  misc/mempcpy.c         misc/mingw-aligned-malloc.c  misc/mingw-fseek.c          misc/mingw_getsp.S    \
   misc/mingw_matherr.c   misc/mingw_mbwc_convert.c    misc/mingw_output_format.c  misc/mingw_usleep.c        misc/mingw_wcstod.c   \
   misc/mingw_wcstof.c    misc/mingw_wcstold.c                                     misc/seterrno.c            misc/sleep.c          \
   misc/spawnv.c          misc/spawnve.c               misc/spawnvp.c              misc/spawnvpe.c            misc/strnlen.c        \
@@ -6035,8 +6034,6 @@
 	misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib32_libmingwex_a-mingw-fseek.$(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-mingw_getsp.$(OBJEXT): misc/$(am__dirstamp) \
 	misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib32_libmingwex_a-mingw_matherr.$(OBJEXT): misc/$(am__dirstamp) \
@@ -6318,6 +6315,8 @@
 	$(AM_V_at)$(RANLIB) lib32/libmoldname.a
 misc/lib32_libmsvcrt_a-invalid_parameter_handler.$(OBJEXT):  \
 	misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp)
+misc/lib32_libmsvcrt_a-lc_locale_func.$(OBJEXT): misc/$(am__dirstamp) \
+	misc/$(DEPDIR)/$(am__dirstamp)
 secapi/$(am__dirstamp):
 	@$(MKDIR_P) secapi
 	@: > secapi/$(am__dirstamp)
@@ -7621,8 +7620,6 @@
 	misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib64_libmingwex_a-mingw-fseek.$(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-mingw_getsp.$(OBJEXT): misc/$(am__dirstamp) \
 	misc/$(DEPDIR)/$(am__dirstamp)
 misc/lib64_libmingwex_a-mingw_matherr.$(OBJEXT): misc/$(am__dirstamp) \
@@ -7898,6 +7895,8 @@
 	$(AM_V_at)$(RANLIB) lib64/libmoldname.a
 misc/lib64_libmsvcrt_a-invalid_parameter_handler.$(OBJEXT):  \
 	misc/$(am__dirstamp) misc/$(DEPDIR)/$(am__dirstamp)
+misc/lib64_libmsvcrt_a-lc_locale_func.$(OBJEXT): misc/$(am__dirstamp) \
+	misc/$(DEPDIR)/$(am__dirstamp)
 secapi/lib64_libmsvcrt_a-_access_s.$(OBJEXT): secapi/$(am__dirstamp) \
 	secapi/$(DEPDIR)/$(am__dirstamp)
 secapi/lib64_libmsvcrt_a-_cgets_s.$(OBJEXT): secapi/$(am__dirstamp) \
@@ -10139,7 +10138,6 @@
 @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@
@@ -10189,6 +10187,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-wmempcpy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmingwex_a-wmemset.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmsvcrt_a-invalid_parameter_handler.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-alarm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-basename.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-btowc.Po@am__quote@
@@ -10229,7 +10228,6 @@
 @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@
@@ -10279,6 +10277,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-wmempcpy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmingwex_a-wmemset.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmsvcrt_a-invalid_parameter_handler.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@profile/$(DEPDIR)/lib32_libgmon_a-gmon.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@profile/$(DEPDIR)/lib32_libgmon_a-mcount.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@profile/$(DEPDIR)/lib32_libgmon_a-mcountFunc.Po@am__quote@
@@ -17355,20 +17354,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmingwex_a-mingw-fseek.obj `if test -f 'misc/mingw-fseek.c'; then $(CYGPATH_W) 'misc/mingw-fseek.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw-fseek.c'; fi`
 
-misc/lib32_libmingwex_a-mingw_get_codepage.o: misc/mingw_get_codepage.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(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_V_at)$(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@	$(AM_V_CC)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@	$(AM_V_CC@am__nodep@)$(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@	$(AM_V_CC)$(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_V_at)$(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@	$(AM_V_CC)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@	$(AM_V_CC@am__nodep@)$(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-mingw_matherr.o: misc/mingw_matherr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmingwex_a-mingw_matherr.o -MD -MP -MF misc/$(DEPDIR)/lib32_libmingwex_a-mingw_matherr.Tpo -c -o misc/lib32_libmingwex_a-mingw_matherr.o `test -f 'misc/mingw_matherr.c' || echo '$(srcdir)/'`misc/mingw_matherr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) misc/$(DEPDIR)/lib32_libmingwex_a-mingw_matherr.Tpo misc/$(DEPDIR)/lib32_libmingwex_a-mingw_matherr.Po
@@ -19091,6 +19076,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmsvcrt_a-invalid_parameter_handler.obj `if test -f 'misc/invalid_parameter_handler.c'; then $(CYGPATH_W) 'misc/invalid_parameter_handler.c'; else $(CYGPATH_W) '$(srcdir)/misc/invalid_parameter_handler.c'; fi`
 
+misc/lib32_libmsvcrt_a-lc_locale_func.o: misc/lc_locale_func.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmsvcrt_a-lc_locale_func.o -MD -MP -MF misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Tpo -c -o misc/lib32_libmsvcrt_a-lc_locale_func.o `test -f 'misc/lc_locale_func.c' || echo '$(srcdir)/'`misc/lc_locale_func.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Tpo misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='misc/lc_locale_func.c' object='misc/lib32_libmsvcrt_a-lc_locale_func.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmsvcrt_a-lc_locale_func.o `test -f 'misc/lc_locale_func.c' || echo '$(srcdir)/'`misc/lc_locale_func.c
+
+misc/lib32_libmsvcrt_a-lc_locale_func.obj: misc/lc_locale_func.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib32_libmsvcrt_a-lc_locale_func.obj -MD -MP -MF misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Tpo -c -o misc/lib32_libmsvcrt_a-lc_locale_func.obj `if test -f 'misc/lc_locale_func.c'; then $(CYGPATH_W) 'misc/lc_locale_func.c'; else $(CYGPATH_W) '$(srcdir)/misc/lc_locale_func.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Tpo misc/$(DEPDIR)/lib32_libmsvcrt_a-lc_locale_func.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='misc/lc_locale_func.c' object='misc/lib32_libmsvcrt_a-lc_locale_func.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib32_libmsvcrt_a-lc_locale_func.obj `if test -f 'misc/lc_locale_func.c'; then $(CYGPATH_W) 'misc/lc_locale_func.c'; else $(CYGPATH_W) '$(srcdir)/misc/lc_locale_func.c'; fi`
+
 secapi/lib32_libmsvcrt_a-_access_s.o: secapi/_access_s.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib32_libmsvcrt_a-_access_s.o -MD -MP -MF secapi/$(DEPDIR)/lib32_libmsvcrt_a-_access_s.Tpo -c -o secapi/lib32_libmsvcrt_a-_access_s.o `test -f 'secapi/_access_s.c' || echo '$(srcdir)/'`secapi/_access_s.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib32_libmsvcrt_a-_access_s.Tpo secapi/$(DEPDIR)/lib32_libmsvcrt_a-_access_s.Po
@@ -26259,20 +26258,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmingwex_a-mingw-fseek.obj `if test -f 'misc/mingw-fseek.c'; then $(CYGPATH_W) 'misc/mingw-fseek.c'; else $(CYGPATH_W) '$(srcdir)/misc/mingw-fseek.c'; fi`
 
-misc/lib64_libmingwex_a-mingw_get_codepage.o: misc/mingw_get_codepage.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(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_V_at)$(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@	$(AM_V_CC)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@	$(AM_V_CC@am__nodep@)$(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@	$(AM_V_CC)$(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_V_at)$(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@	$(AM_V_CC)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@	$(AM_V_CC@am__nodep@)$(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-mingw_matherr.o: misc/mingw_matherr.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmingwex_a-mingw_matherr.o -MD -MP -MF misc/$(DEPDIR)/lib64_libmingwex_a-mingw_matherr.Tpo -c -o misc/lib64_libmingwex_a-mingw_matherr.o `test -f 'misc/mingw_matherr.c' || echo '$(srcdir)/'`misc/mingw_matherr.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) misc/$(DEPDIR)/lib64_libmingwex_a-mingw_matherr.Tpo misc/$(DEPDIR)/lib64_libmingwex_a-mingw_matherr.Po
@@ -27995,6 +27980,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmsvcrt_a-invalid_parameter_handler.obj `if test -f 'misc/invalid_parameter_handler.c'; then $(CYGPATH_W) 'misc/invalid_parameter_handler.c'; else $(CYGPATH_W) '$(srcdir)/misc/invalid_parameter_handler.c'; fi`
 
+misc/lib64_libmsvcrt_a-lc_locale_func.o: misc/lc_locale_func.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmsvcrt_a-lc_locale_func.o -MD -MP -MF misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Tpo -c -o misc/lib64_libmsvcrt_a-lc_locale_func.o `test -f 'misc/lc_locale_func.c' || echo '$(srcdir)/'`misc/lc_locale_func.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Tpo misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='misc/lc_locale_func.c' object='misc/lib64_libmsvcrt_a-lc_locale_func.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmsvcrt_a-lc_locale_func.o `test -f 'misc/lc_locale_func.c' || echo '$(srcdir)/'`misc/lc_locale_func.c
+
+misc/lib64_libmsvcrt_a-lc_locale_func.obj: misc/lc_locale_func.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT misc/lib64_libmsvcrt_a-lc_locale_func.obj -MD -MP -MF misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Tpo -c -o misc/lib64_libmsvcrt_a-lc_locale_func.obj `if test -f 'misc/lc_locale_func.c'; then $(CYGPATH_W) 'misc/lc_locale_func.c'; else $(CYGPATH_W) '$(srcdir)/misc/lc_locale_func.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Tpo misc/$(DEPDIR)/lib64_libmsvcrt_a-lc_locale_func.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='misc/lc_locale_func.c' object='misc/lib64_libmsvcrt_a-lc_locale_func.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o misc/lib64_libmsvcrt_a-lc_locale_func.obj `if test -f 'misc/lc_locale_func.c'; then $(CYGPATH_W) 'misc/lc_locale_func.c'; else $(CYGPATH_W) '$(srcdir)/misc/lc_locale_func.c'; fi`
+
 secapi/lib64_libmsvcrt_a-_access_s.o: secapi/_access_s.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmsvcrt_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT secapi/lib64_libmsvcrt_a-_access_s.o -MD -MP -MF secapi/$(DEPDIR)/lib64_libmsvcrt_a-_access_s.Tpo -c -o secapi/lib64_libmsvcrt_a-_access_s.o `test -f 'secapi/_access_s.c' || echo '$(srcdir)/'`secapi/_access_s.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) secapi/$(DEPDIR)/lib64_libmsvcrt_a-_access_s.Tpo secapi/$(DEPDIR)/lib64_libmsvcrt_a-_access_s.Po
diff --git a/mingw-w64-crt/misc/btowc.c b/mingw-w64-crt/misc/btowc.c
index da232cb..aaabc0c 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 (__mingw_get_codepage(), MB_ERR_INVALID_CHARS,
+      MultiByteToWideChar (__lc_codepage_func(), MB_ERR_INVALID_CHARS,
 			   (char*)&ch, 1, &wc, 1);
       return wc;
     }
diff --git a/mingw-w64-crt/misc/lc_locale_func.c b/mingw-w64-crt/misc/lc_locale_func.c
new file mode 100644
index 0000000..3bf1543
--- /dev/null
+++ b/mingw-w64-crt/misc/lc_locale_func.c
@@ -0,0 +1,43 @@
+#define __lc_codepage __dummy_lc_codepage
+#include <windows.h>
+#include <locale.h>
+
+#include "mb_wc_common.h"
+
+HANDLE __mingw_get_msvcrt_handle(void);
+
+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;
+}
+
+static unsigned int __cdecl init_codepage_func(void);
+unsigned int (__cdecl *__MINGW_IMP_SYMBOL(__lc_codepage_func))(void) = init_codepage_func;
+
+static unsigned int __cdecl init_codepage_func(void)
+{
+    HMODULE msvcrt = __mingw_get_msvcrt_handle();
+    unsigned int (__cdecl *func)(void) = NULL;
+
+    if(msvcrt) {
+        func = (void*)GetProcAddress(msvcrt, "___lc_codepage_func");
+        if(!func) {
+            msvcrt__lc_codepage = (unsigned int*)GetProcAddress(msvcrt, "__lc_codepage");
+            if(msvcrt__lc_codepage)
+                func = msvcrt__lc_codepage_func;
+        }
+    }
+
+    if(!func)
+        func = setlocale_codepage_hack;
+
+    return (__MINGW_IMP_SYMBOL(__lc_codepage_func) = func)();
+}
diff --git a/mingw-w64-crt/misc/mb_wc_common.h b/mingw-w64-crt/misc/mb_wc_common.h
index 64cac2d..c95243b 100644
--- a/mingw-w64-crt/misc/mb_wc_common.h
+++ b/mingw-w64-crt/misc/mb_wc_common.h
@@ -6,4 +6,4 @@
 
 #include <_mingw.h>
 
-extern unsigned int (__cdecl *__mingw_get_codepage)(void);
+_CRTIMP unsigned int __cdecl __lc_codepage_func(void);
diff --git a/mingw-w64-crt/misc/mbrtowc.c b/mingw-w64-crt/misc/mbrtowc.c
index ac66a28..df4d318 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,
-				__mingw_get_codepage(), MB_CUR_MAX);
+				__lc_codepage_func(), 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 = __mingw_get_codepage();
+  const unsigned int cp = __lc_codepage_func();
   const unsigned int mb_max = MB_CUR_MAX;
 
   if (src == NULL || *src == NULL)	/* undefined behavior */
@@ -156,5 +156,5 @@
   static mbstate_t s_mbstate = 0;
   wchar_t byte_bucket = 0;
   return __mbrtowc_cp (&byte_bucket, s, n, (ps) ? ps : &s_mbstate,
-		       __mingw_get_codepage(), MB_CUR_MAX);
+		       __lc_codepage_func(), MB_CUR_MAX);
 }
diff --git a/mingw-w64-crt/misc/mingw_get_codepage.c b/mingw-w64-crt/misc/mingw_get_codepage.c
deleted file mode 100644
index 8f2d493..0000000
--- a/mingw-w64-crt/misc/mingw_get_codepage.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#define __lc_codepage __dummy_lc_codepage
-#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;
-#undef __lc_codepage
-extern unsigned int
-  (*__lc_codepage)(void) __attribute__ ((alias ("__mingw_get_codepage")));
-
diff --git a/mingw-w64-crt/misc/wcrtomb.c b/mingw-w64-crt/misc/wcrtomb.c
index 3cd6ce8..aae58ea 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[0];
-  return (size_t)__wcrtomb_cp (tmp_dst, wc, __mingw_get_codepage (),
+  return (size_t)__wcrtomb_cp (tmp_dst, wc, __lc_codepage_func(),
 			       MB_CUR_MAX);
 }
 
@@ -58,7 +58,7 @@
 {
   int ret = 0;
   size_t n = 0;
-  const unsigned int cp = __mingw_get_codepage();
+  const unsigned int cp = __lc_codepage_func();
   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 c655544..eea597b 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 = __mingw_get_codepage();
+  const unsigned int cp = __lc_codepage_func();
 
   /* 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 f35c940..e0fd352 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 = __mingw_get_codepage();
+  const unsigned int cp = __lc_codepage_func();
 
   /* 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 a2089a5..435abf1 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 (__mingw_get_codepage(),
+    if (!WideCharToMultiByte (__lc_codepage_func(),
 			      0 /* Is this correct flag? */,
 			      &w, 1, &c, 1, NULL, &invalid_char)
 	 || invalid_char)