Print this page
Thread safety fixes.

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libc/port/locale/lnumeric.c
          +++ new/usr/src/lib/libc/port/locale/lnumeric.c
↓ open down ↓ 39 lines elided ↑ open up ↑
  40   40  static char     numempty[] = { CHAR_MAX, '\0' };
  41   41  
  42   42  struct lc_numeric lc_numeric_posix = {
  43   43          ".",            /* decimal_point */
  44   44          "",             /* thousands_sep */
  45   45          numempty        /* grouping */
  46   46  };
  47   47  
  48   48  struct locdata __posix_numeric_locdata = {
  49   49          .l_lname = "C",
  50      -        .l_refcnt = (uint32_t)-1,
  51   50          .l_data = { &lc_numeric_posix }
  52   51  };
  53   52  
  54   53  
  55   54  /*
  56      - * Return the locale's numeric locdata structure, places a hold on it,
  57      - * which the caller must release.
       55 + * Return the locale's numeric locdata structure.
  58   56   */
  59   57  struct locdata *
  60   58  __lc_numeric_load(const char *name)
  61   59  {
  62   60          struct locdata *ldata;
  63   61          struct lc_numeric *lnum;
  64   62          int ret;
  65   63  
  66   64          if ((ldata = __locdata_alloc(name, sizeof (*lnum))) == NULL) {
  67   65                  errno = EINVAL;
  68   66                  return (NULL);
  69   67          }
  70   68          lnum = ldata->l_data[0];
  71   69  
  72   70          ret = __part_load_locale(name, (char **)&ldata->l_data[1],
  73   71              "LC_NUMERIC", LCNUMERIC_SIZE, LCNUMERIC_SIZE, (const char **)lnum);
  74   72  
  75   73          if (ret != _LDP_LOADED) {
  76      -                __locdata_release(ldata);
       74 +                __locdata_free(ldata);
  77   75                  return (NULL);
  78   76          }
  79   77  
  80   78          /* Can't be empty according to C99 */
  81   79          if (*lnum->decimal_point == '\0')
  82   80                  lnum->decimal_point = lc_numeric_posix.decimal_point;
  83   81          lnum->grouping = __fix_locale_grouping_str(lnum->grouping);
  84   82  
  85   83          return (ldata);
  86   84  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX