Changeset 1782


Ignore:
Timestamp:
Jan 17, 2005, 5:38:47 AM (21 years ago)
Author:
bird
Message:

monetary C/Posix locale was wrong.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/src/lib/locale/setlocale.c

    • Property cvs2svn:cvs-rev changed from 1.10 to 1.11
    r1781 r1782  
    222222static void localeMonetaryFree(__LIBC_PLOCALELCONV pLconv);
    223223static int localeNumericDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, struct UniLconv *pULconv);
    224 static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv);
     224static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv, const char *pszLocale);
    225225static void localeGlobalFree(__LIBC_PLOCALEGLOBAL pGlobal, int iCategory);
    226226static int localeParseLocale(char *pszLocale, const char **ppszCodepage);
     
    902902 * @param   uobj        The UconvObject to use.
    903903 * @param   pULconv     Pointer to the pULconv structure to get the data from.
    904  */
    905 static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv)
     904 * @param   pszLocale   The locale specifier.
     905 */
     906static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv, const char *pszLocale)
    906907{
    907908    int rc;
     
    909910    localeMonetaryFree(pLconv);
    910911
    911     /*
    912      * Convert the stuff.
    913      */
     912    if (    !IS_C_LOCALE(pszLocale)
     913        &&  !IS_POSIX_LOCALE(pszLocale))
     914    {
     915        /*
     916         * Convert the stuff.
     917         */
    914918#define CONVERT_UCS(field) \
    915     do  { rc = convert_ucs(uobj, pULconv->field, &pLconv->s.field); if (rc) return rc; } while (0)
    916     CONVERT_UCS(int_curr_symbol);
    917     CONVERT_UCS(currency_symbol);
    918     CONVERT_UCS(mon_decimal_point);
    919     CONVERT_UCS(mon_thousands_sep);
    920     CONVERT_UCS(positive_sign);
    921     CONVERT_UCS(negative_sign);
    922     pLconv->s.int_frac_digits   = pULconv->int_frac_digits;
    923     pLconv->s.frac_digits       = pULconv->frac_digits;
    924     pLconv->s.p_cs_precedes     = pULconv->p_cs_precedes;
    925     pLconv->s.p_sep_by_space    = pULconv->p_sep_by_space;
    926     pLconv->s.n_cs_precedes     = pULconv->n_cs_precedes;
    927     pLconv->s.n_sep_by_space    = pULconv->n_sep_by_space;
    928     pLconv->s.p_sign_posn       = pULconv->p_sign_posn;
    929     pLconv->s.n_sign_posn       = pULconv->n_sign_posn;
     919        do  { rc = convert_ucs(uobj, pULconv->field, &pLconv->s.field); if (rc) return rc; } while (0)
     920        CONVERT_UCS(int_curr_symbol);
     921        CONVERT_UCS(currency_symbol);
     922        CONVERT_UCS(mon_decimal_point);
     923        CONVERT_UCS(mon_thousands_sep);
     924        CONVERT_UCS(positive_sign);
     925        CONVERT_UCS(negative_sign);
     926        pLconv->s.int_frac_digits   = pULconv->int_frac_digits;
     927        pLconv->s.frac_digits       = pULconv->frac_digits;
     928        pLconv->s.p_cs_precedes     = pULconv->p_cs_precedes;
     929        pLconv->s.p_sep_by_space    = pULconv->p_sep_by_space;
     930        pLconv->s.n_cs_precedes     = pULconv->n_cs_precedes;
     931        pLconv->s.n_sep_by_space    = pULconv->n_sep_by_space;
     932        pLconv->s.p_sign_posn       = pULconv->p_sign_posn;
     933        pLconv->s.n_sign_posn       = pULconv->n_sign_posn;
    930934#undef CONVERT_UCS
    931935
    932     /*
    933      * Extra stuff (which I don't know which member corresponds to).
    934      */
    935     if ((rc = query_item(lobj, uobj, CRNCYSTR, &pLconv->pszCrncyStr)))
    936         return rc;
    937 
    938     return localeConvertGrouping(pULconv->mon_grouping, &pLconv->s.mon_grouping);
     936        /*
     937         * Extra stuff (which I don't know which member corresponds to).
     938         */
     939        if ((rc = query_item(lobj, uobj, CRNCYSTR, &pLconv->pszCrncyStr)))
     940            return rc;
     941
     942        return localeConvertGrouping(pULconv->mon_grouping, &pLconv->s.mon_grouping);
     943    }
     944    else
     945    {
     946        /*
     947         * The C/POSIX locale.
     948         */
     949        pLconv->fMonetaryConsts = 1;
     950        pLconv->s.int_curr_symbol = pLconv->s.currency_symbol = pLconv->s.mon_decimal_point
     951            = pLconv->s.mon_thousands_sep = pLconv->s.positive_sign = pLconv->s.negative_sign
     952            = pLconv->pszCrncyStr = "";
     953        pLconv->s.int_frac_digits   = -1;
     954        pLconv->s.frac_digits       = -1;
     955        pLconv->s.p_cs_precedes     = -1;
     956        pLconv->s.p_sep_by_space    = -1;
     957        pLconv->s.n_cs_precedes     = -1;
     958        pLconv->s.n_sep_by_space    = -1;
     959        pLconv->s.p_sign_posn       = -1;
     960        pLconv->s.n_sign_posn       = -1;
     961        return 0;
     962    }
    939963}
    940964
     
    12331257                    rc = localeNumericDo(&pTemp->Lconv, uobj, pULconv);
    12341258                else
    1235                     rc = localeMonetaryDo(&pTemp->Lconv, uobj, lobj, pULconv);
     1259                    rc = localeMonetaryDo(&pTemp->Lconv, uobj, lobj, pULconv, pszLocale);
    12361260                UniFreeLocaleInfo(pULconv);
    12371261            }
Note: See TracChangeset for help on using the changeset viewer.