Changeset 3936


Ignore:
Timestamp:
Oct 26, 2014, 4:30:04 PM (11 years ago)
Author:
bird
Message:

trunk,0.6: The two constant lconv locale structures had .pszCrncyStr set to NULL instead of empty string, causing setlocale to crash after r3915/r3916 (#292). Also tuned the string swapping to be conditionless when dealing with constant locales (since the old strings remain valid forever).

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/libc-0.6/src/emx/src/lib/locale/locale_lconv.c

    r2161 r3936  
    5959    },
    6060
     61    .pszCrncyStr = "",
    6162    .fNumericConsts = 1,
    6263    .fMonetaryConsts = 1
     
    9596    },
    9697
     98    .pszCrncyStr = "",
    9799    .fNumericConsts = 1,
    98100    .fMonetaryConsts = 1
  • branches/libc-0.6/src/emx/src/lib/locale/setlocale.c

    r3916 r3936  
    905905static void localeTimeCommit(__LIBC_LOCALETIME *pHot, __LIBC_PLOCALETIME pCold)
    906906{
    907     int const fOverride = pHot->fConsts != pCold->fConsts;
     907    int const fOverride = pHot->fConsts != pCold->fConsts || pCold->fConsts;
    908908    SWAP_SIMPLE_MEMBERS(pHot, pCold, int, fConsts);
    909909    MAYBE_SWAP_STRING_ARRAY_MEMBERS(pHot, pCold, smonths, fOverride);
     
    962962static void localeNumericCommit(__LIBC_LOCALELCONV volatile *pHot, __LIBC_PLOCALELCONV pCold)
    963963{
    964     int const fOverride = pHot->fNumericConsts != pCold->fNumericConsts;
     964    int const fOverride = pHot->fNumericConsts != pCold->fNumericConsts || pCold->fNumericConsts;
    965965    SWAP_SIMPLE_MEMBERS(pHot, pCold, int, fNumericConsts);
    966966    MAYBE_SWAP_STRING_MEMBERS(pHot, pCold, s.decimal_point, fOverride);
     
    992992static void localeMonetaryCommit(__LIBC_LOCALELCONV volatile *pHot, __LIBC_PLOCALELCONV pCold)
    993993{
    994     int const fOverride = pHot->fMonetaryConsts != pCold->fMonetaryConsts;
     994    int const fOverride = pHot->fMonetaryConsts != pCold->fMonetaryConsts || pCold->fMonetaryConsts;
    995995    SWAP_SIMPLE_MEMBERS(pHot, pCold, int,    fMonetaryConsts);
    996996    MAYBE_SWAP_STRING_MEMBERS(pHot, pCold,   s.int_curr_symbol, fOverride);
     
    12141214static void localeMessagesCommit(__LIBC_LOCALEMSG *pHot, __LIBC_PLOCALEMSG pCold)
    12151215{
    1216     int const fOverride = pHot->fConsts != pCold->fConsts;
     1216    int const fOverride = pHot->fConsts != pCold->fConsts || pCold->fConsts;
    12171217    SWAP_SIMPLE_MEMBERS(pHot, pCold, int, fConsts);
    12181218    MAYBE_SWAP_STRING_MEMBERS(pHot, pCold, pszYesExpr, fOverride);
  • trunk/libc/src/libc/locale/locale_lconv.c

    r3871 r3936  
    5959    },
    6060
     61    .pszCrncyStr = "",
    6162    .fNumericConsts = 1,
    6263    .fMonetaryConsts = 1
     
    9596    },
    9697
     98    .pszCrncyStr = "",
    9799    .fNumericConsts = 1,
    98100    .fMonetaryConsts = 1
  • trunk/libc/src/libc/locale/os2/setlocale.c

    r3916 r3936  
    905905static void localeTimeCommit(__LIBC_LOCALETIME *pHot, __LIBC_PLOCALETIME pCold)
    906906{
    907     int const fOverride = pHot->fConsts != pCold->fConsts;
     907    int const fOverride = pHot->fConsts != pCold->fConsts || pCold->fConsts;
    908908    SWAP_SIMPLE_MEMBERS(pHot, pCold, int, fConsts);
    909909    MAYBE_SWAP_STRING_ARRAY_MEMBERS(pHot, pCold, smonths, fOverride);
     
    962962static void localeNumericCommit(__LIBC_LOCALELCONV volatile *pHot, __LIBC_PLOCALELCONV pCold)
    963963{
    964     int const fOverride = pHot->fNumericConsts != pCold->fNumericConsts;
     964    int const fOverride = pHot->fNumericConsts != pCold->fNumericConsts || pCold->fNumericConsts;
    965965    SWAP_SIMPLE_MEMBERS(pHot, pCold, int, fNumericConsts);
    966966    MAYBE_SWAP_STRING_MEMBERS(pHot, pCold, s.decimal_point, fOverride);
     
    992992static void localeMonetaryCommit(__LIBC_LOCALELCONV volatile *pHot, __LIBC_PLOCALELCONV pCold)
    993993{
    994     int const fOverride = pHot->fMonetaryConsts != pCold->fMonetaryConsts;
     994    int const fOverride = pHot->fMonetaryConsts != pCold->fMonetaryConsts || pCold->fMonetaryConsts;
    995995    SWAP_SIMPLE_MEMBERS(pHot, pCold, int,    fMonetaryConsts);
    996996    MAYBE_SWAP_STRING_MEMBERS(pHot, pCold,   s.int_curr_symbol, fOverride);
     
    12141214static void localeMessagesCommit(__LIBC_LOCALEMSG *pHot, __LIBC_PLOCALEMSG pCold)
    12151215{
    1216     int const fOverride = pHot->fConsts != pCold->fConsts;
     1216    int const fOverride = pHot->fConsts != pCold->fConsts || pCold->fConsts;
    12171217    SWAP_SIMPLE_MEMBERS(pHot, pCold, int, fConsts);
    12181218    MAYBE_SWAP_STRING_MEMBERS(pHot, pCold, pszYesExpr, fOverride);
Note: See TracChangeset for help on using the changeset viewer.