[BACK]Return to localeconv.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / locale

Annotation of src/lib/libc/locale/localeconv.c, Revision 1.6

1.1       cgd         1: /*
1.6     ! jtc         2:  * Written by J.T. Conklin <jtc@netbsd.org>.
        !             3:  * Public domain.
1.1       cgd         4:  */
                      5:
                      6: #if defined(LIBC_SCCS) && !defined(lint)
1.6     ! jtc         7: static char *rcsid = "$Id: localeconv.c,v 1.5 1994/09/29 04:57:29 jtc Exp $";
1.1       cgd         8: #endif /* LIBC_SCCS and not lint */
                      9:
1.5       jtc        10: #include <sys/localedef.h>
1.1       cgd        11: #include <locale.h>
                     12:
1.4       jtc        13: /*
                     14:  * The localeconv() function constructs a struct lconv from the current
                     15:  * monetary and numeric locales.
                     16:  *
                     17:  * Because localeconv() may be called many times (especially by library
                     18:  * routines like printf() & strtod()), the approprate members of the
                     19:  * lconv structure are computed only when the monetary or numeric
                     20:  * locale has been changed.
                     21:  */
                     22: int __mlocale_changed = 1;
                     23: int __nlocale_changed = 1;
                     24:
1.1       cgd        25: /*
                     26:  * Return the current locale conversion.
                     27:  */
                     28: struct lconv *
                     29: localeconv()
                     30: {
1.4       jtc        31:     static struct lconv ret;
                     32:
                     33:     if (__mlocale_changed) {
                     34:        /* LC_MONETARY */
                     35:        ret.int_curr_symbol     = _CurrentMonetaryLocale->int_curr_symbol;
                     36:        ret.currency_symbol     = _CurrentMonetaryLocale->currency_symbol;
                     37:        ret.mon_decimal_point   = _CurrentMonetaryLocale->mon_decimal_point;
                     38:        ret.mon_thousands_sep   = _CurrentMonetaryLocale->mon_thousands_sep;
                     39:        ret.mon_grouping        = _CurrentMonetaryLocale->mon_grouping;
                     40:        ret.positive_sign       = _CurrentMonetaryLocale->positive_sign;
                     41:        ret.negative_sign       = _CurrentMonetaryLocale->negative_sign;
                     42:        ret.int_frac_digits     = _CurrentMonetaryLocale->int_frac_digits;
                     43:        ret.frac_digits         = _CurrentMonetaryLocale->frac_digits;
                     44:        ret.p_cs_precedes       = _CurrentMonetaryLocale->p_cs_precedes;
                     45:        ret.p_sep_by_space      = _CurrentMonetaryLocale->p_sep_by_space;
                     46:        ret.n_cs_precedes       = _CurrentMonetaryLocale->n_cs_precedes;
                     47:        ret.n_sep_by_space      = _CurrentMonetaryLocale->n_sep_by_space;
                     48:        ret.p_sign_posn         = _CurrentMonetaryLocale->p_sign_posn;
                     49:        ret.n_sign_posn         = _CurrentMonetaryLocale->n_sign_posn;
                     50:        __mlocale_changed = 0;
                     51:     }
                     52:
                     53:     if (__nlocale_changed) {
                     54:        /* LC_NUMERIC */
                     55:        ret.decimal_point       = (char *) _CurrentNumericLocale->decimal_point;
                     56:        ret.thousands_sep       = (char *) _CurrentNumericLocale->thousands_sep;
                     57:        ret.grouping            = (char *) _CurrentNumericLocale->grouping;
                     58:        __nlocale_changed = 0;
                     59:     }
1.1       cgd        60:
1.4       jtc        61:     return (&ret);
1.1       cgd        62: }

CVSweb <webmaster@jp.NetBSD.org>