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 2.1 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 # include <errno.h> 30 # include <limits.h> 31 # include <stdlib.h> 32 33 # include "strnlen1.h" 34 35 extern mbstate_t _gl_mbsrtoc32s_state; 36 37 # define FUNC mbsrtoc32s 38 # define DCHAR_T char32_t 39 # define INTERNAL_STATE _gl_mbsrtoc32s_state 40 # define MBRTOWC mbrtoc32 41 # include "mbsrtowcs-impl.h" 42 43 #else 44 /* char32_t and wchar_t are equivalent. */ 45 46 # include "verify.h" 47 48 verify (sizeof (char32_t) == sizeof (wchar_t)); 49 50 size_t 51 mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps) /* */ 52 { 53 return mbsrtowcs ((wchar_t *) dest, srcp, len, ps); 54 } 55 56 #endif