Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Approved by: TBD

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libc/port/locale/nextwctype.c
          +++ new/usr/src/lib/libc/port/locale/nextwctype.c
   1    1  /*
        2 + * Copyright 2013 Garrett D'Amore <garrett@damore.org>
   2    3   * Copyright (c) 2004 Tim J. Robbins.
   3    4   * All rights reserved.
   4    5   *
   5    6   * Redistribution and use in source and binary forms, with or without
   6    7   * modification, are permitted provided that the following conditions
   7    8   * are met:
   8    9   * 1. Redistributions of source code must retain the above copyright
   9   10   *    notice, this list of conditions and the following disclaimer.
  10   11   * 2. Redistributions in binary form must reproduce the above copyright
  11   12   *    notice, this list of conditions and the following disclaimer in the
↓ open down ↓ 9 lines elided ↑ open up ↑
  21   22   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22   23   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23   24   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24   25   * SUCH DAMAGE.
  25   26   */
  26   27  
  27   28  #include "lint.h"
  28   29  #include "runetype.h"
  29   30  #include <wchar.h>
  30   31  #include <wctype.h>
       32 +#include "localeimpl.h"
  31   33  
  32      -wint_t
  33      -__nextwctype(wint_t wc, wctype_t wct)
       34 +/*
       35 + * nextwctype, while exposed on *BSD/MacOS X, is considered "consolidation
       36 + * private" for illumos.  Hence, we keep the _l version static for now.
       37 + * If we decide to make this public, just remove the static keyword and
       38 + * put it in the headers and mapfile.  (Should fix up the underscore prefix
       39 + * to __nextwctype() as well.)
       40 + */
       41 +static wint_t
       42 +nextwctype_l(wint_t wc, wctype_t wct, locale_t loc)
  34   43  {
  35   44          size_t lim;
  36      -        _RuneRange *rr = &_CurrentRuneLocale->__runetype_ext;
  37      -        _RuneEntry *base, *re;
       45 +        const _RuneLocale *rl;
       46 +        const _RuneRange *rr;
       47 +        const _RuneEntry *base, *re;
  38   48          int noinc;
  39   49  
       50 +        rl = loc->runelocale;
       51 +        rr = &rl->__runetype_ext;
       52 +
  40   53          noinc = 0;
  41   54          if (wc < _CACHED_RUNES) {
  42   55                  wc++;
  43   56                  while (wc < _CACHED_RUNES) {
  44      -                        if (_CurrentRuneLocale->__runetype[wc] & wct)
       57 +                        if (rl->__runetype[wc] & wct)
  45   58                                  return (wc);
  46   59                          wc++;
  47   60                  }
  48   61                  wc--;
  49   62          }
  50   63          if (rr->__ranges != NULL && wc < rr->__ranges[0].__min) {
  51   64                  wc = rr->__ranges[0].__min;
  52   65                  noinc = 1;
  53   66          }
  54   67  
↓ open down ↓ 23 lines elided ↑ open up ↑
  78   91          while (++re < rr->__ranges + rr->__nranges) {
  79   92                  wc = re->__min;
  80   93                  if (re->__types != NULL) {
  81   94                          for (; wc <= re->__max; wc++)
  82   95                                  if (re->__types[wc - re->__min] & wct)
  83   96                                          return (wc);
  84   97                  } else if (re->__map & wct)
  85   98                          return (wc);
  86   99          }
  87  100          return (-1);
      101 +}
      102 +
      103 +/*
      104 + * External, but consolidation private routine.
      105 + */
      106 +wint_t
      107 +__nextwctype(wint_t wc, wctype_t wct)
      108 +{
      109 +        return (nextwctype_l(wc, wct, uselocale(NULL)));
  88  110  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX