Print this page
Thread safety fixes.

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libc/port/locale/lmessages.c
          +++ new/usr/src/lib/libc/port/locale/lmessages.c
↓ open down ↓ 40 lines elided ↑ open up ↑
  41   41  
  42   42  struct lc_messages lc_messages_posix = {
  43   43          "^[yY]",        /* yesexpr */
  44   44          "^[nN]",        /* noexpr */
  45   45          "yes",          /* yesstr */
  46   46          "no"            /* nostr */
  47   47  };
  48   48  
  49   49  struct locdata __posix_messages_locdata = {
  50   50          .l_lname = "C",
  51      -        .l_refcnt = (uint32_t)-1,
  52   51          .l_data = { &lc_messages_posix }
  53   52  };
  54   53  
  55   54  struct locdata *
  56   55  __lc_messages_load(const char *name)
  57   56  {
  58   57          struct locdata *ldata;
  59   58          struct lc_messages *lmsgs;
  60   59          int ret;
  61   60  
  62   61          if ((ldata = __locdata_alloc(name, sizeof (*lmsgs))) == NULL)
  63   62                  return (NULL);
  64   63          lmsgs = ldata->l_data[0];
  65   64  
  66   65          ret = __part_load_locale(name, (char **)&ldata->l_data[1],
  67   66              "LC_MESSAGES", LCMESSAGES_SIZE_FULL, LCMESSAGES_SIZE_MIN,
  68   67              (const char **)lmsgs);
  69   68  
  70   69          if (ret != _LDP_LOADED) {
  71      -                __locdata_release(ldata);
       70 +                __locdata_free(ldata);
  72   71                  errno = EINVAL;
  73   72                  return (NULL);
  74   73          }
  75   74  
  76   75          if (lmsgs->yesstr == NULL)
  77   76                  lmsgs->yesstr = empty;
  78   77          if (lmsgs->nostr == NULL)
  79   78                  lmsgs->nostr = empty;
  80   79  
  81   80          return (ldata);
  82   81  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX