xref: /openbsd-src/include/wchar.h (revision e4900374111d9fcb2dbe48f0cc7afe9c6094da02)
1 /*	$OpenBSD: wchar.h,v 1.33 2024/08/07 04:59:45 guenther Exp $	*/
2 /*	$NetBSD: wchar.h,v 1.16 2003/03/07 07:11:35 tshiozak Exp $	*/
3 
4 /*-
5  * Copyright (c)1999 Citrus Project,
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 /*-
31  * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
32  * All rights reserved.
33  *
34  * This code is derived from software contributed to The NetBSD Foundation
35  * by Julian Coleman.
36  *
37  * Redistribution and use in source and binary forms, with or without
38  * modification, are permitted provided that the following conditions
39  * are met:
40  * 1. Redistributions of source code must retain the above copyright
41  *    notice, this list of conditions and the following disclaimer.
42  * 2. Redistributions in binary form must reproduce the above copyright
43  *    notice, this list of conditions and the following disclaimer in the
44  *    documentation and/or other materials provided with the distribution.
45  *
46  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
47  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
48  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
49  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
50  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
51  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
52  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
53  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
54  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
55  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
56  * POSSIBILITY OF SUCH DAMAGE.
57  */
58 
59 #ifndef _WCHAR_H_
60 #define _WCHAR_H_
61 
62 #include <sys/cdefs.h>
63 #include <sys/_null.h>
64 #include <sys/_types.h>
65 
66 #include <stdio.h> /* for FILE* */
67 
68 #if !defined(_WCHAR_T_DEFINED_) && !defined(__cplusplus)
69 #define _WCHAR_T_DEFINED_
70 typedef	__wchar_t	wchar_t;
71 #endif
72 
73 #ifndef	_MBSTATE_T_DEFINED_
74 #define	_MBSTATE_T_DEFINED_
75 typedef	__mbstate_t	mbstate_t;
76 #endif
77 
78 #ifndef	_WINT_T_DEFINED_
79 #define	_WINT_T_DEFINED_
80 typedef	__wint_t	wint_t;
81 #endif
82 
83 #ifndef	_SIZE_T_DEFINED_
84 #define	_SIZE_T_DEFINED_
85 typedef	__size_t	size_t;
86 #endif
87 
88 #ifndef	WEOF
89 #define	WEOF 	((wint_t)-1)
90 #endif
91 
92 #ifndef	WCHAR_MIN
93 #define	WCHAR_MIN	(-0x7fffffff - 1)
94 #endif
95 #ifndef	WCHAR_MAX
96 #define	WCHAR_MAX	0x7fffffff
97 #endif
98 
99 #if __POSIX_VISIBLE >= 200809
100 #ifndef	_LOCALE_T_DEFINED_
101 #define	_LOCALE_T_DEFINED_
102 typedef void	*locale_t;
103 #endif
104 #endif
105 
106 __BEGIN_DECLS
107 wint_t	btowc(int);
108 size_t	mbrlen(const char * __restrict, size_t, mbstate_t * __restrict);
109 size_t	mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
110 	    mbstate_t * __restrict);
111 int	mbsinit(const mbstate_t *);
112 size_t	mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
113 	    mbstate_t * __restrict)
114 		__attribute__ ((__bounded__(__wcstring__,1,3)));
115 size_t	wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
116 wchar_t	*wcscat(wchar_t * __restrict, const wchar_t * __restrict);
117 wchar_t	*wcschr(const wchar_t *, wchar_t);
118 int	wcscmp(const wchar_t *, const wchar_t *);
119 int	wcscoll(const wchar_t *, const wchar_t *);
120 wchar_t	*wcscpy(wchar_t * __restrict, const wchar_t * __restrict);
121 size_t	wcscspn(const wchar_t *, const wchar_t *);
122 size_t	wcslen(const wchar_t *);
123 wchar_t	*wcsncat(wchar_t * __restrict, const wchar_t * __restrict,
124 	    size_t)
125 		__attribute__ ((__bounded__(__wcstring__,1,3)));
126 int	wcsncmp(const wchar_t *, const wchar_t *, size_t);
127 wchar_t	*wcsncpy(wchar_t * __restrict , const wchar_t * __restrict,
128 	    size_t)
129 		__attribute__ ((__bounded__(__wcstring__,1,3)));
130 wchar_t	*wcspbrk(const wchar_t *, const wchar_t *);
131 wchar_t	*wcsrchr(const wchar_t *, wchar_t);
132 size_t	wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
133 	    mbstate_t * __restrict)
134 		__attribute__ ((__bounded__(__wcstring__,1,3)));
135 size_t	wcsspn(const wchar_t *, const wchar_t *);
136 wchar_t	*wcsstr(const wchar_t *, const wchar_t *);
137 wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict,
138 		     wchar_t ** __restrict);
139 size_t	wcsxfrm(wchar_t *, const wchar_t *, size_t);
140 wchar_t	*wcswcs(const wchar_t *, const wchar_t *);
141 wchar_t	*wmemchr(const wchar_t *, wchar_t, size_t);
142 int	wmemcmp(const wchar_t *, const wchar_t *, size_t);
143 wchar_t	*wmemcpy(wchar_t * __restrict, const wchar_t * __restrict,
144 	    size_t)
145 		__attribute__ ((__bounded__(__wcstring__,1,3)))
146 		__attribute__ ((__bounded__(__wcstring__,2,3)));
147 wchar_t	*wmemmove(wchar_t *, const wchar_t *, size_t)
148 		__attribute__ ((__bounded__(__wcstring__,1,3)))
149 		__attribute__ ((__bounded__(__wcstring__,2,3)));
150 wchar_t	*wmemset(wchar_t *, wchar_t, size_t)
151 		__attribute__ ((__bounded__(__wcstring__,1,3)));
152 
153 int	wcswidth(const wchar_t *, size_t);
154 int	wctob(wint_t);
155 int	wcwidth(wchar_t);
156 
157 double wcstod(const wchar_t * __restrict, wchar_t ** __restrict);
158 long int wcstol(const wchar_t * __restrict, wchar_t ** __restrict, int base);
159 unsigned long int wcstoul(const wchar_t * __restrict, wchar_t ** __restrict,
160 		int base);
161 
162 #if __POSIX_VISIBLE >= 200809
163 FILE *open_wmemstream(wchar_t **, size_t *);
164 
165 int wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
166 wchar_t	*wcsdup(const wchar_t *);
167 int wcscasecmp(const wchar_t *, const wchar_t *);
168 int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t);
169 size_t	wcsnlen(const wchar_t *, size_t);
170 int wcsncasecmp(const wchar_t *, const wchar_t *, size_t);
171 int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t);
172 size_t wcsxfrm_l(wchar_t *, const wchar_t *, size_t, locale_t);
173 
174 size_t mbsnrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
175     size_t, mbstate_t * __restrict)
176 		__attribute__ ((__bounded__(__wcstring__,1,4)));
177 size_t wcsnrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
178     size_t, mbstate_t * __restrict)
179 		__attribute__ ((__bounded__(__wcstring__,1,4)));
180 #endif
181 
182 #if __ISO_C_VISIBLE >= 1999
183 float	wcstof(const wchar_t * __restrict, wchar_t ** __restrict);
184 long double wcstold(const wchar_t * __restrict, wchar_t ** __restrict);
185 
186 struct tm;
187 size_t wcsftime(wchar_t * __restrict, size_t, const wchar_t *__restrict,
188 	const struct tm *__restrict);
189 #endif
190 
191 #if !defined(__STRICT_ANSI__) || __ISO_C_VISIBLE >= 1999
192 long long int wcstoll(const wchar_t * __restrict,
193 	wchar_t ** __restrict, int base);
194 unsigned long long int wcstoull(const wchar_t * __restrict,
195 	wchar_t ** __restrict, int base);
196 #endif
197 
198 wint_t ungetwc(wint_t, FILE *);
199 wint_t fgetwc(FILE *);
200 wchar_t *fgetws(wchar_t * __restrict, int, FILE * __restrict)
201 		__attribute__ ((__bounded__(__wcstring__,1,2)));
202 wint_t getwc(FILE *);
203 wint_t getwchar(void);
204 wint_t fputwc(wchar_t, FILE *);
205 int fputws(const wchar_t * __restrict, FILE * __restrict);
206 wint_t putwc(wchar_t, FILE *);
207 wint_t putwchar(wchar_t);
208 
209 int fwide(FILE *, int);
210 
211 int fwprintf(FILE * __restrict, const wchar_t * __restrict, ...);
212 int swprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict, ...);
213 int vfwprintf(FILE * __restrict, const wchar_t * __restrict, __va_list);
214 int vswprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict,
215 	__va_list);
216 int vwprintf(const wchar_t * __restrict, __va_list);
217 int wprintf(const wchar_t * __restrict, ...);
218 
219 int fwscanf(FILE * __restrict, const wchar_t * __restrict, ...);
220 int swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...);
221 int vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list);
222 int vswscanf(const wchar_t * __restrict, const wchar_t * __restrict, __va_list);
223 int vwscanf(const wchar_t * __restrict, __va_list);
224 int wscanf(const wchar_t * __restrict, ...);
225 
226 #if __POSIX_VISIBLE >= 202405 || __BSD_VISIBLE
227 size_t	wcslcat(wchar_t * __restrict, const wchar_t * __restrict, size_t)
228 		__attribute__ ((__bounded__(__wcstring__,1,3)));
229 size_t	wcslcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t)
230 		__attribute__ ((__bounded__(__wcstring__,1,3)));
231 #endif
232 
233 #if __BSD_VISIBLE
234 wchar_t *fgetwln(FILE * __restrict, size_t * __restrict);
235 #endif
236 
237 #define getwc(f) fgetwc(f)
238 #define getwchar() getwc(stdin)
239 #define putwc(wc, f) fputwc((wc), (f))
240 #define putwchar(wc) putwc((wc), stdout)
241 __END_DECLS
242 
243 #endif /* !_WCHAR_H_ */
244