1 #include "newlib.h" 2 #include "setlocale.h" 3 4 struct lconv * __localeconv_l(struct __locale_t * locale)5__localeconv_l (struct __locale_t *locale) 6 { 7 struct lconv *lconv = &locale->lconv; 8 if (locale == __get_C_locale ()) 9 return lconv; 10 11 #ifdef __HAVE_LOCALE_INFO__ 12 const struct lc_numeric_T *n = __get_numeric_locale (locale); 13 const struct lc_monetary_T *m = __get_monetary_locale (locale); 14 15 lconv->decimal_point = (char *) n->decimal_point; 16 lconv->thousands_sep = (char *) n->thousands_sep; 17 lconv->grouping = (char *) n->grouping; 18 lconv->int_curr_symbol = (char *) m->int_curr_symbol; 19 lconv->currency_symbol = (char *) m->currency_symbol; 20 lconv->mon_decimal_point = (char *) m->mon_decimal_point; 21 lconv->mon_thousands_sep = (char *) m->mon_thousands_sep; 22 lconv->mon_grouping = (char *) m->mon_grouping; 23 lconv->positive_sign = (char *) m->positive_sign; 24 lconv->negative_sign = (char *) m->negative_sign; 25 lconv->int_frac_digits = m->int_frac_digits[0]; 26 lconv->frac_digits = m->frac_digits[0]; 27 lconv->p_cs_precedes = m->p_cs_precedes[0]; 28 lconv->p_sep_by_space = m->p_sep_by_space[0]; 29 lconv->n_cs_precedes = m->n_cs_precedes[0]; 30 lconv->n_sep_by_space = m->n_sep_by_space[0]; 31 lconv->p_sign_posn = m->p_sign_posn[0]; 32 lconv->n_sign_posn = m->n_sign_posn[0]; 33 #ifdef __HAVE_LOCALE_INFO_EXTENDED__ 34 lconv->int_p_cs_precedes = m->int_p_cs_precedes[0]; 35 lconv->int_p_sep_by_space = m->int_p_sep_by_space[0]; 36 lconv->int_n_cs_precedes = m->int_n_cs_precedes[0]; 37 lconv->int_n_sep_by_space = m->int_n_sep_by_space[0]; 38 lconv->int_n_sign_posn = m->int_n_sign_posn[0]; 39 lconv->int_p_sign_posn = m->int_p_sign_posn[0]; 40 #else /* !__HAVE_LOCALE_INFO_EXTENDED__ */ 41 lconv->int_p_cs_precedes = m->p_cs_precedes[0]; 42 lconv->int_p_sep_by_space = m->p_sep_by_space[0]; 43 lconv->int_n_cs_precedes = m->n_cs_precedes[0]; 44 lconv->int_n_sep_by_space = m->n_sep_by_space[0]; 45 lconv->int_n_sign_posn = m->n_sign_posn[0]; 46 lconv->int_p_sign_posn = m->p_sign_posn[0]; 47 #endif /* !__HAVE_LOCALE_INFO_EXTENDED__ */ 48 #endif /* __HAVE_LOCALE_INFO__ */ 49 return lconv; 50 } 51 52 struct lconv * localeconv(void)53localeconv (void) 54 { 55 /* Note that we always fall back to the global locale, even in case 56 of specifying a reent. Otherwise a call to _localeconv_r would just 57 crash if the reent locale pointer is NULL. */ 58 return __localeconv_l (__get_current_locale ()); 59 } 60