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