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/utf8.c
          +++ new/usr/src/lib/libc/port/locale/utf8.c
   1    1  /*
        2 + * Copyright 2013 Garrett D'Amore <garrett@damore.org>
   2    3   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
   3    4   * Copyright (c) 2002-2004 Tim J. Robbins
   4    5   * All rights reserved.
   5    6   *
   6    7   * Redistribution and use in source and binary forms, with or without
   7    8   * modification, are permitted provided that the following conditions
   8    9   * are met:
   9   10   * 1. Redistributions of source code must retain the above copyright
  10   11   *    notice, this list of conditions and the following disclaimer.
  11   12   * 2. Redistributions in binary form must reproduce the above copyright
↓ open down ↓ 9 lines elided ↑ open up ↑
  21   22   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22   23   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  23   24   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  24   25   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  25   26   * SUCH DAMAGE.
  26   27   */
  27   28  
  28   29  #include "lint.h"
  29   30  #include <errno.h>
  30   31  #include <limits.h>
  31      -#include "runetype.h"
  32   32  #include <stdlib.h>
  33   33  #include <string.h>
  34   34  #include <wchar.h>
  35   35  #include "mblocal.h"
       36 +#include "lctype.h"
  36   37  
  37   38  static size_t   _UTF8_mbrtowc(wchar_t *_RESTRICT_KYWD,
  38   39                      const char *_RESTRICT_KYWD,
  39   40                      size_t, mbstate_t *_RESTRICT_KYWD);
  40   41  static int      _UTF8_mbsinit(const mbstate_t *);
  41   42  static size_t   _UTF8_mbsnrtowcs(wchar_t *_RESTRICT_KYWD,
  42   43                      const char **_RESTRICT_KYWD, size_t, size_t,
  43   44                      mbstate_t *_RESTRICT_KYWD);
  44   45  static size_t   _UTF8_wcrtomb(char *_RESTRICT_KYWD, wchar_t,
  45   46                      mbstate_t *_RESTRICT_KYWD);
  46   47  static size_t   _UTF8_wcsnrtombs(char *_RESTRICT_KYWD,
  47   48                      const wchar_t **_RESTRICT_KYWD,
  48   49                      size_t, size_t, mbstate_t *_RESTRICT_KYWD);
  49   50  
  50   51  typedef struct {
  51   52          wchar_t ch;
  52   53          int     want;
  53   54          wchar_t lbound;
  54   55  } _UTF8State;
  55   56  
  56      -int
  57      -_UTF8_init(_RuneLocale *rl)
       57 +void
       58 +_UTF8_init(struct lc_ctype *lct)
  58   59  {
  59      -        __mbrtowc = _UTF8_mbrtowc;
  60      -        __wcrtomb = _UTF8_wcrtomb;
  61      -        __mbsinit = _UTF8_mbsinit;
  62      -        __mbsnrtowcs = _UTF8_mbsnrtowcs;
  63      -        __wcsnrtombs = _UTF8_wcsnrtombs;
  64      -        _CurrentRuneLocale = rl;
  65      -
  66      -        charset_is_ascii = 0;
  67      -
  68      -        /*
  69      -         * In theory up to 6 bytes can be used for the encoding,
  70      -         * but only encodings with more than 4 bytes are illegal.
  71      -         */
  72      -        __ctype[520] = 4;
  73      -        /*
  74      -         * Note that the other CSWIDTH members are nonsensical for this
  75      -         * this coding.  They only are valid with EUC codings.
  76      -         */
  77      -
  78      -        return (0);
       60 +        lct->lc_mbrtowc = _UTF8_mbrtowc;
       61 +        lct->lc_wcrtomb = _UTF8_wcrtomb;
       62 +        lct->lc_mbsinit = _UTF8_mbsinit;
       63 +        lct->lc_mbsnrtowcs = _UTF8_mbsnrtowcs;
       64 +        lct->lc_wcsnrtombs = _UTF8_wcsnrtombs;
       65 +        lct->lc_is_ascii = 0;
       66 +        lct->lc_max_mblen = 4;
  79   67  }
  80   68  
  81   69  static int
  82   70  _UTF8_mbsinit(const mbstate_t *ps)
  83   71  {
  84   72  
  85   73          return (ps == NULL || ((const _UTF8State *)ps)->want == 0);
  86   74  }
  87   75  
  88   76  static size_t
↓ open down ↓ 342 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX