root/maint/gnulib/lib/mbsnrtoc32s.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mbsnrtoc32s

   1 /* Convert string to 32-bit wide string.
   2    Copyright (C) 2020-2021 Free Software Foundation, Inc.
   3    Written by Bruno Haible <bruno@clisp.org>, 2020.
   4 
   5    This file is free software: you can redistribute it and/or modify
   6    it under the terms of the GNU Lesser General Public License as
   7    published by the Free Software Foundation; either version 3 of the
   8    License, or (at your option) any later version.
   9 
  10    This file is distributed in the hope that it will be useful,
  11    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13    GNU Lesser General Public License for more details.
  14 
  15    You should have received a copy of the GNU Lesser General Public License
  16    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  17 
  18 #include <config.h>
  19 
  20 /* Specification.  */
  21 #include <uchar.h>
  22 
  23 #include <wchar.h>
  24 
  25 #if (HAVE_WORKING_MBRTOC32 && !defined __GLIBC__) || _GL_LARGE_CHAR32_T
  26 /* The char32_t encoding of a multibyte character may be different than its
  27    wchar_t encoding, or char32_t is wider than wchar_t.  */
  28 
  29 /* For Cygwin >= 1.7 it would be possible to speed this up a bit by cutting
  30    the source into chunks, calling mbsnrtowcs on a chunk, then u16_to_u32 on
  31    the result, then proceed with the next chunk, and so on.
  32    But speed is not critical here so far.  */
  33 
  34 /* Reuse the implementation of mbsnrtowcs with a different parameterization.  */
  35 
  36 # include <errno.h>
  37 # include <limits.h>
  38 # include <stdlib.h>
  39 
  40 # include "minmax.h"
  41 # include "strnlen1.h"
  42 
  43 extern mbstate_t _gl_mbsrtoc32s_state;
  44 
  45 # define FUNC mbsnrtoc32s
  46 # define DCHAR_T char32_t
  47 # define INTERNAL_STATE _gl_mbsrtoc32s_state
  48 # define MBRTOWC mbrtoc32
  49 # include "mbsnrtowcs-impl.h"
  50 
  51 #else
  52 /* char32_t and wchar_t are equivalent.  */
  53 
  54 # include "verify.h"
  55 
  56 verify (sizeof (char32_t) == sizeof (wchar_t));
  57 
  58 size_t
  59 mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len,
     /* [previous][next][first][last][top][bottom][index][help] */
  60              mbstate_t *ps)
  61 {
  62   return mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps);
  63 }
  64 
  65 #endif

/* [previous][next][first][last][top][bottom][index][help] */