#define __lc_codepage __dummy_lc_codepage
#include <windows.h>
#include <locale.h>
#include <msvcrt.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;
}

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)();
}
