added missing misc/mingw_get_codepage.c

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/branches/releases/v1.0@4360 4407c894-4637-0410-b4f5-ada5f102cad1
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;