Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include        <locale.h>
#include        <limits.h>
#include        <string.h>

static struct lconv Clocale = {
        ".",            /* decimal_point */
        "",             /* thousands_sep */
        "",             /* grouping */
        "",             /* int_curr_symbol */
        "",             /* currency_symbol */
        "",             /* mon_decimal_point */
        "",             /* mon_thousands_sep */
        "",             /* mon_grouping */
        "",             /* positive_sign */
        "",             /* 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 */
};

static char *localename[2] = {"C", ""};
static short catlocale[6] = {0, 0, 0, 0, 0, 0};
        /* indices into localename  for categories LC_ALL, LC_COLLATE, etc. */

#define ASIZE(a) (sizeof(a)/sizeof(a[0]))

char *
setlocale(int category, const char *locale)
{
        int c, i;

        if(category < 0 || category >= ASIZE(catlocale))
                return 0;
        if(!locale)
                return localename[catlocale[category]];
        for(c=0; c<ASIZE(localename); c++)
                if(strcmp(locale, localename[c]) == 0)
                        break;
        if(c >= ASIZE(localename))
                return 0;
        catlocale[category] = c;
        if(category == LC_ALL)
                for(i=0; i<ASIZE(catlocale); i++)
                        catlocale[i] = c;
        return localename[c];
}

struct lconv *
localeconv(void)
{
        /* BUG: posix says look at environment variables
         * to set locale "", but we just make it the same
         * as C, always.
         */
        return &Clocale;
}