master
  1/*	$NetBSD: uchar.h,v 1.6.2.2 2024/10/14 17:20:21 martin Exp $	*/
  2
  3/*-
  4 * Copyright (c) 2024 The NetBSD Foundation, Inc.
  5 * All rights reserved.
  6 *
  7 * Redistribution and use in source and binary forms, with or without
  8 * modification, are permitted provided that the following conditions
  9 * are met:
 10 * 1. Redistributions of source code must retain the above copyright
 11 *    notice, this list of conditions and the following disclaimer.
 12 * 2. Redistributions in binary form must reproduce the above copyright
 13 *    notice, this list of conditions and the following disclaimer in the
 14 *    documentation and/or other materials provided with the distribution.
 15 *
 16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 19 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 26 * POSSIBILITY OF SUCH DAMAGE.
 27 */
 28
 29/*
 30 * C11, 7.28: Unicode utilities <uchar.h>
 31 * C17, 7.28: Unicode utilities <uchar.h> (unchanged from C11)
 32 * C23, 7.30: Unicode utilities <uchar.h>
 33 */
 34
 35#ifndef	_UCHAR_H
 36#define	_UCHAR_H
 37
 38#include <sys/ansi.h>
 39#include <sys/cdefs.h>
 40#include <sys/featuretest.h>
 41
 42/*
 43 * C23	`2. The macro
 44 *
 45 *		__STDC_VERSION_UCHAR_H__
 46 *
 47 *	    is an integer constant expression with a value equivalent
 48 *	    to 202311L.'
 49 */
 50#if defined(_NETBSD_SOURCE) || defined(_ISOC23_SOURCE) || \
 51    __STDC_VERSION__ - 0 >= 202311L
 52#define	__STDC_VERSION_UCHAR_H__	202311L
 53#endif
 54
 55/*
 56 * C11	`2. The types declared are mbstate_t (described in 7.30.1) and
 57 *	    size_t (described in 7.19);
 58 *
 59 *	    	char16_t
 60 *
 61 *	    which is an unsigned integer type used for 16-bit
 62 *	    characters and is the same type as uint_least16_t
 63 *	    (described in 7.20.1.2); and
 64 *
 65 *		char32_t
 66 *
 67 *	    which is an unsigned integer type used for 32-bit
 68 *	    characters and is the same type as uint_least32_t (also
 69 *	    described in 7.20.1.2).'
 70 */
 71
 72#ifdef _BSD_MBSTATE_T_
 73typedef _BSD_MBSTATE_T_	mbstate_t;
 74#undef _BSD_MBSTATE_T_
 75#endif
 76
 77#ifdef _BSD_SIZE_T_
 78typedef _BSD_SIZE_T_	size_t;
 79#undef _BSD_SIZE_T_
 80#endif
 81
 82/*
 83 * C23	`char8_t...is an unsigned integer type used for 8-bit
 84 *	 characters and is the same type as unsigned char'
 85 */
 86#if defined(_NETBSD_SOURCE) || defined(_ISOC23_SOURCE) || \
 87    __STDC_VERSION__ - 0 >= 202311L
 88#if __cpp_char8_t - 0 < 201811L
 89typedef unsigned char		char8_t;
 90#endif
 91#endif
 92
 93#if __cplusplus - 0 < 201103L
 94typedef __UINT_LEAST16_TYPE__	char16_t;
 95typedef __UINT_LEAST32_TYPE__	char32_t;
 96#endif
 97
 98__BEGIN_DECLS
 99
100#if defined(_NETBSD_SOURCE) || defined(_ISOC23_SOURCE) || \
101    __STDC_VERSION__ - 0 >= 202311L
102size_t	mbrtoc8(char8_t *__restrict, const char *__restrict, size_t,
103	    mbstate_t *__restrict);
104size_t	c8rtomb(char *__restrict, char8_t, mbstate_t *__restrict);
105#endif
106size_t	mbrtoc16(char16_t *__restrict, const char *__restrict, size_t,
107	    mbstate_t *__restrict);
108size_t	c16rtomb(char *__restrict, char16_t, mbstate_t *__restrict);
109size_t	mbrtoc32(char32_t *__restrict, const char *__restrict, size_t,
110	    mbstate_t *__restrict);
111size_t	c32rtomb(char *__restrict, char32_t, mbstate_t *__restrict);
112
113#ifdef _NETBSD_SOURCE
114struct _locale;
115size_t	mbrtoc8_l(char8_t *__restrict, const char *__restrict, size_t,
116	    mbstate_t *__restrict, struct _locale *__restrict);
117size_t	c8rtomb_l(char *__restrict, char8_t, mbstate_t *__restrict,
118	    struct _locale *__restrict);
119size_t	mbrtoc16_l(char16_t *__restrict, const char *__restrict, size_t,
120	    mbstate_t *__restrict, struct _locale *__restrict);
121size_t	c16rtomb_l(char *__restrict, char16_t, mbstate_t *__restrict,
122	    struct _locale *__restrict);
123size_t	mbrtoc32_l(char32_t *__restrict, const char *__restrict, size_t,
124	    mbstate_t *__restrict, struct _locale *__restrict);
125size_t	c32rtomb_l(char *__restrict, char32_t, mbstate_t *__restrict,
126	    struct _locale *__restrict);
127#endif
128
129__END_DECLS
130
131#endif	/* _UCHAR_H */