/*** *lconv.c - Contains the localeconv function * * Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: * Contains the localeconv() function. * *******************************************************************************/ #include #include #include /* pointer to original static to avoid freeing */ extern "C" { char __acrt_lconv_static_decimal []{"."}; } extern "C" { char __acrt_lconv_static_null []{""}; } extern "C" { wchar_t __acrt_lconv_static_W_decimal[]{L"."}; } extern "C" { wchar_t __acrt_lconv_static_W_null []{L""}; } /* lconv settings for "C" locale */ extern "C" { struct lconv __acrt_lconv_c { __acrt_lconv_static_decimal, // decimal_point __acrt_lconv_static_null, // thousands_sep __acrt_lconv_static_null, // grouping __acrt_lconv_static_null, // int_curr_symbol __acrt_lconv_static_null, // currency_symbol __acrt_lconv_static_null, // mon_decimal_point __acrt_lconv_static_null, // mon_thousands_sep __acrt_lconv_static_null, // mon_grouping __acrt_lconv_static_null, // positive_sign __acrt_lconv_static_null, // negative_sign CHAR_MAX, // int_frac_digits CHAR_MAX, // frac_digits CHAR_MAX, // p_cs_precedes CHAR_MAX, // p_sep_by_space CHAR_MAX, // n_cs_precedes CHAR_MAX, // n_sep_by_space CHAR_MAX, // p_sign_posn CHAR_MAX, // n_sign_posn __acrt_lconv_static_W_decimal, // _W_decimal_point __acrt_lconv_static_W_null, // _W_thousands_sep __acrt_lconv_static_W_null, // _W_int_curr_symbol __acrt_lconv_static_W_null, // _W_currency_symbol __acrt_lconv_static_W_null, // _W_mon_decimal_point __acrt_lconv_static_W_null, // _W_mon_thousands_sep __acrt_lconv_static_W_null, // _W_positive_sign __acrt_lconv_static_W_null, // _W_negative_sign }; } /* pointer to current lconv structure */ extern "C" { struct lconv* __acrt_lconv{&__acrt_lconv_c}; } /*** *struct lconv *localeconv(void) - Return the numeric formatting convention * *Purpose: * The localeconv() routine returns the numeric formatting conventions * for the current locale setting. [ANSI] * *Entry: * void * *Exit: * struct lconv * = pointer to struct indicating current numeric * formatting conventions. * *Exceptions: * *******************************************************************************/ extern "C" lconv* __cdecl localeconv() { // Note that we don't need _LocaleUpdate in this function. The main reason // being, that this is a leaf function in locale usage terms. __acrt_ptd* const ptd = __acrt_getptd(); __crt_locale_data* locale_info = ptd->_locale_info; __acrt_update_locale_info(ptd, &locale_info); return locale_info->lconv; }