1 | /* $NetBSD: wchar.h,v 1.43 2018/12/28 13:11:46 maya Exp $ */ |
2 | |
3 | /*- |
4 | * Copyright (c)1999 Citrus Project, |
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 AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
17 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
20 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
21 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
22 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
23 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
24 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
25 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
26 | * SUCH DAMAGE. |
27 | */ |
28 | |
29 | /*- |
30 | * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc. |
31 | * All rights reserved. |
32 | * |
33 | * This code is derived from software contributed to The NetBSD Foundation |
34 | * by Julian Coleman. |
35 | * |
36 | * Redistribution and use in source and binary forms, with or without |
37 | * modification, are permitted provided that the following conditions |
38 | * are met: |
39 | * 1. Redistributions of source code must retain the above copyright |
40 | * notice, this list of conditions and the following disclaimer. |
41 | * 2. Redistributions in binary form must reproduce the above copyright |
42 | * notice, this list of conditions and the following disclaimer in the |
43 | * documentation and/or other materials provided with the distribution. |
44 | * |
45 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
46 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
47 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
48 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
49 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
50 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
51 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
52 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
53 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
54 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
55 | * POSSIBILITY OF SUCH DAMAGE. |
56 | */ |
57 | |
58 | #ifndef _WCHAR_H_ |
59 | #define _WCHAR_H_ |
60 | |
61 | #include <sys/cdefs.h> |
62 | #include <sys/featuretest.h> |
63 | #include <machine/wchar_limits.h> |
64 | #include <sys/ansi.h> |
65 | #include <sys/null.h> |
66 | |
67 | #include <stdio.h> /* for FILE* */ |
68 | |
69 | #if defined(_BSD_WCHAR_T_) && !defined(__cplusplus) |
70 | typedef _BSD_WCHAR_T_ wchar_t; |
71 | #undef _BSD_WCHAR_T_ |
72 | #endif |
73 | |
74 | #ifdef _BSD_MBSTATE_T_ |
75 | typedef _BSD_MBSTATE_T_ mbstate_t; |
76 | #undef _BSD_MBSTATE_T_ |
77 | #endif |
78 | |
79 | #ifdef _BSD_WINT_T_ |
80 | typedef _BSD_WINT_T_ wint_t; |
81 | #undef _BSD_WINT_T_ |
82 | #endif |
83 | |
84 | #ifdef _BSD_SIZE_T_ |
85 | typedef _BSD_SIZE_T_ size_t; |
86 | #undef _BSD_SIZE_T_ |
87 | #endif |
88 | |
89 | #if defined(_POSIX_C_SOURCE) |
90 | #ifndef __VA_LIST_DECLARED |
91 | typedef __va_list va_list; |
92 | #define __VA_LIST_DECLARED |
93 | #endif |
94 | #endif |
95 | |
96 | struct tm; |
97 | |
98 | __BEGIN_DECLS |
99 | wint_t btowc(int); |
100 | size_t mbrlen(const char * __restrict, size_t, mbstate_t * __restrict); |
101 | size_t mbrtowc(wchar_t * __restrict, const char * __restrict, size_t, |
102 | mbstate_t * __restrict); |
103 | int mbsinit(const mbstate_t *); |
104 | size_t mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t, |
105 | mbstate_t * __restrict); |
106 | size_t wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict); |
107 | wchar_t *wcscat(wchar_t * __restrict, const wchar_t * __restrict); |
108 | wchar_t *wcschr(const wchar_t *, wchar_t); |
109 | int wcscmp(const wchar_t *, const wchar_t *); |
110 | int wcscoll(const wchar_t *, const wchar_t *); |
111 | wchar_t *wcscpy(wchar_t * __restrict, const wchar_t * __restrict); |
112 | size_t wcscspn(const wchar_t *, const wchar_t *); |
113 | size_t wcsftime(wchar_t * __restrict, size_t, const wchar_t * __restrict, |
114 | const struct tm * __restrict); |
115 | size_t wcslen(const wchar_t *); |
116 | wchar_t *wcsncat(wchar_t * __restrict, const wchar_t * __restrict, size_t); |
117 | int wcsncmp(const wchar_t *, const wchar_t *, size_t); |
118 | wchar_t *wcsncpy(wchar_t * __restrict , const wchar_t * __restrict, size_t); |
119 | size_t wcsnlen(const wchar_t *, size_t); |
120 | wchar_t *wcspbrk(const wchar_t *, const wchar_t *); |
121 | wchar_t *wcsrchr(const wchar_t *, wchar_t); |
122 | size_t wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t, |
123 | mbstate_t * __restrict); |
124 | size_t wcsspn(const wchar_t *, const wchar_t *); |
125 | wchar_t *wcsstr(const wchar_t *, const wchar_t *); |
126 | wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict, |
127 | wchar_t ** __restrict); |
128 | size_t wcsxfrm(wchar_t *, const wchar_t *, size_t); |
129 | wchar_t *wcswcs(const wchar_t *, const wchar_t *); |
130 | wchar_t *wmemchr(const wchar_t *, wchar_t, size_t); |
131 | int wmemcmp(const wchar_t *, const wchar_t *, size_t); |
132 | wchar_t *wmemcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t); |
133 | wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t); |
134 | wchar_t *wmemset(wchar_t *, wchar_t, size_t); |
135 | |
136 | #if defined(_NETBSD_SOURCE) |
137 | size_t wcslcat(wchar_t *, const wchar_t *, size_t); |
138 | size_t wcslcpy(wchar_t *, const wchar_t *, size_t); |
139 | #endif |
140 | |
141 | #if defined(_NETBSD_SOURCE) || \ |
142 | (_POSIX_C_SOURCE - 0 >= 200112L) || (_XOPEN_SOURCE - 0) >= 600 |
143 | int wcswidth(const wchar_t *, size_t); |
144 | int wcwidth(wchar_t); |
145 | #endif |
146 | |
147 | int wctob(wint_t); |
148 | unsigned long int wcstoul(const wchar_t * __restrict, |
149 | wchar_t ** __restrict, int); |
150 | long int wcstol(const wchar_t * __restrict, |
151 | wchar_t ** __restrict, int); |
152 | double wcstod(const wchar_t * __restrict, wchar_t ** __restrict); |
153 | |
154 | #if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) > 199901L || \ |
155 | defined(_NETBSD_SOURCE) || \ |
156 | (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 600 |
157 | float wcstof(const wchar_t * __restrict, wchar_t ** __restrict); |
158 | long double wcstold(const wchar_t * __restrict, wchar_t ** __restrict); |
159 | |
160 | /* LONGLONG */ |
161 | long long int wcstoll(const wchar_t * __restrict, |
162 | wchar_t ** __restrict, int); |
163 | /* LONGLONG */ |
164 | unsigned long long int wcstoull(const wchar_t * __restrict, |
165 | wchar_t ** __restrict, int); |
166 | #endif |
167 | |
168 | #if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
169 | defined(_NETBSD_SOURCE) |
170 | FILE *open_wmemstream(wchar_t **, size_t *); |
171 | #endif |
172 | |
173 | wint_t ungetwc(wint_t, FILE *); |
174 | wint_t fgetwc(FILE *); |
175 | wchar_t *fgetws(wchar_t * __restrict, int, FILE * __restrict); |
176 | wint_t getwc(FILE *); |
177 | wint_t getwchar(void); |
178 | wint_t fputwc(wchar_t, FILE *); |
179 | int fputws(const wchar_t * __restrict, FILE * __restrict); |
180 | wint_t putwc(wchar_t, FILE *); |
181 | wint_t putwchar(wchar_t); |
182 | |
183 | int fwide(FILE *, int); |
184 | |
185 | wchar_t *fgetwln(FILE * __restrict, size_t * __restrict); |
186 | int fwprintf(FILE * __restrict, const wchar_t * __restrict, ...); |
187 | int fwscanf(FILE * __restrict, const wchar_t * __restrict, ...); |
188 | int swprintf(wchar_t * __restrict, size_t n, const wchar_t * __restrict, ...); |
189 | int swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...); |
190 | int vfwprintf(FILE * __restrict, const wchar_t * __restrict, __va_list); |
191 | int vswprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict, |
192 | __va_list); |
193 | int vwprintf(const wchar_t * __restrict, __va_list); |
194 | int wprintf(const wchar_t * __restrict, ...); |
195 | int wscanf(const wchar_t * __restrict, ...); |
196 | #if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) > 199901L || \ |
197 | defined(_NETBSD_SOURCE) || \ |
198 | (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 600 |
199 | int vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list); |
200 | int vswscanf(const wchar_t * __restrict, const wchar_t * __restrict, |
201 | __va_list); |
202 | int vwscanf(const wchar_t * __restrict, __va_list); |
203 | #endif |
204 | #if defined(_NETBSD_SOURCE) |
205 | struct tinfo; |
206 | int t_putws(struct tinfo *, const wchar_t *, int, void (*)(wchar_t, void *), |
207 | void *); |
208 | wchar_t *wcsdup (const wchar_t *); |
209 | int wcsncasecmp (const wchar_t *, const wchar_t *, size_t); |
210 | int wcscasecmp(const wchar_t *, const wchar_t *); |
211 | #endif |
212 | __END_DECLS |
213 | |
214 | #ifndef WEOF |
215 | #define WEOF ((wint_t)-1) |
216 | #endif |
217 | |
218 | #define getwc(f) fgetwc(f) |
219 | #define getwchar() getwc(stdin) |
220 | #define putwc(wc, f) fputwc((wc), (f)) |
221 | #define putwchar(wc) putwc((wc), stdout) |
222 | |
223 | #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) |
224 | # ifndef __LOCALE_T_DECLARED |
225 | typedef struct _locale *locale_t; |
226 | # define __LOCALE_T_DECLARED |
227 | # endif |
228 | __BEGIN_DECLS |
229 | size_t mbsnrtowcs(wchar_t * __restrict, const char ** __restrict, size_t, |
230 | size_t, mbstate_t * __restrict); |
231 | size_t wcsnrtombs(char * __restrict, const wchar_t ** __restrict, size_t, |
232 | size_t, mbstate_t * __restrict); |
233 | |
234 | int wcscoll_l(const wchar_t *, const wchar_t *, locale_t); |
235 | size_t wcsxfrm_l(wchar_t *, const wchar_t *, size_t, locale_t); |
236 | int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t); |
237 | int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t); |
238 | |
239 | size_t wcsftime_l(wchar_t * __restrict, size_t, const wchar_t * __restrict, |
240 | const struct tm * __restrict, locale_t); |
241 | |
242 | float wcstof_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t); |
243 | double wcstod_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t); |
244 | long double wcstold_l(const wchar_t * __restrict, wchar_t ** __restrict, |
245 | locale_t); |
246 | long int wcstol_l(const wchar_t * __restrict, wchar_t ** __restrict, int, |
247 | locale_t); |
248 | unsigned long int wcstoul_l(const wchar_t * __restrict, |
249 | wchar_t ** __restrict, int, locale_t); |
250 | /* LONGLONG */ |
251 | long long int wcstoll_l(const wchar_t * __restrict, wchar_t ** __restrict, int, |
252 | locale_t); |
253 | /* LONGLONG */ |
254 | unsigned long long int wcstoull_l(const wchar_t * __restrict, |
255 | wchar_t ** __restrict, int, locale_t); |
256 | int wcwidth_l(wchar_t, locale_t); |
257 | int wcswidth_l(const wchar_t *, size_t, locale_t); |
258 | __END_DECLS |
259 | #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */ |
260 | |
261 | #if defined(_NETBSD_SOURCE) |
262 | __BEGIN_DECLS |
263 | wint_t btowc_l(int, locale_t); |
264 | size_t mbrlen_l(const char * __restrict, size_t, mbstate_t * __restrict, |
265 | locale_t); |
266 | size_t mbrtowc_l(wchar_t * __restrict, const char * __restrict, size_t, |
267 | mbstate_t * __restrict, locale_t); |
268 | int mbsinit_l(const mbstate_t *, locale_t); |
269 | size_t mbsrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t, |
270 | mbstate_t * __restrict, locale_t); |
271 | size_t mbsnrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t, |
272 | size_t, mbstate_t * __restrict, locale_t); |
273 | size_t wcrtomb_l(char * __restrict, wchar_t, mbstate_t * __restrict, locale_t); |
274 | size_t wcsrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t, |
275 | mbstate_t * __restrict, locale_t); |
276 | size_t wcsnrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t, |
277 | size_t, mbstate_t * __restrict, locale_t); |
278 | int wctob_l(wint_t, locale_t); |
279 | |
280 | int fwprintf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, ...); |
281 | int swprintf_l(wchar_t * __restrict, size_t n, locale_t, |
282 | const wchar_t * __restrict, ...); |
283 | int vfwprintf_l(FILE * __restrict, locale_t, |
284 | const wchar_t * __restrict, __va_list); |
285 | int vswprintf_l(wchar_t * __restrict, size_t, locale_t, |
286 | const wchar_t * __restrict, __va_list); |
287 | int vwprintf_l(locale_t, const wchar_t * __restrict, __va_list); |
288 | int wprintf_l(locale_t, const wchar_t * __restrict, ...); |
289 | |
290 | int fwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, ...); |
291 | int swscanf_l(const wchar_t * __restrict, locale_t, const wchar_t * |
292 | __restrict, ...); |
293 | int wscanf_l(locale_t, const wchar_t * __restrict, ...); |
294 | int vfwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, |
295 | __va_list); |
296 | int vswscanf_l(const wchar_t * __restrict, locale_t, const wchar_t * __restrict, |
297 | __va_list); |
298 | int vwscanf_l(locale_t, const wchar_t * __restrict, __va_list); |
299 | __END_DECLS |
300 | #endif /* _NETBSD_SOURCE */ |
301 | |
302 | #endif /* !_WCHAR_H_ */ |
303 | |