jcs's openbsd hax
openbsd
1/* $OpenBSD: wchar.h,v 1.34 2025/07/16 15:33:05 yasuoka 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#ifndef _STDFILES_DECLARED
67#define _STDFILES_DECLARED
68typedef struct __sFILE FILE;
69struct __sFstub { long _stub; };
70
71__BEGIN_DECLS
72extern struct __sFstub __stdin[];
73extern struct __sFstub __stdout[];
74extern struct __sFstub __stderr[];
75__END_DECLS
76#endif
77
78#if !defined(_WCHAR_T_DEFINED_) && !defined(__cplusplus)
79#define _WCHAR_T_DEFINED_
80typedef __wchar_t wchar_t;
81#endif
82
83#ifndef _MBSTATE_T_DEFINED_
84#define _MBSTATE_T_DEFINED_
85typedef __mbstate_t mbstate_t;
86#endif
87
88#ifndef _WINT_T_DEFINED_
89#define _WINT_T_DEFINED_
90typedef __wint_t wint_t;
91#endif
92
93#ifndef _SIZE_T_DEFINED_
94#define _SIZE_T_DEFINED_
95typedef __size_t size_t;
96#endif
97
98#ifndef WEOF
99#define WEOF ((wint_t)-1)
100#endif
101
102#ifndef WCHAR_MIN
103#define WCHAR_MIN (-0x7fffffff - 1)
104#endif
105#ifndef WCHAR_MAX
106#define WCHAR_MAX 0x7fffffff
107#endif
108
109#if __POSIX_VISIBLE >= 200809
110#ifndef _LOCALE_T_DEFINED_
111#define _LOCALE_T_DEFINED_
112typedef void *locale_t;
113#endif
114#endif
115
116__BEGIN_DECLS
117wint_t btowc(int);
118size_t mbrlen(const char * __restrict, size_t, mbstate_t * __restrict);
119size_t mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
120 mbstate_t * __restrict);
121int mbsinit(const mbstate_t *);
122size_t mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
123 mbstate_t * __restrict)
124 __attribute__ ((__bounded__(__wcstring__,1,3)));
125size_t wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
126wchar_t *wcscat(wchar_t * __restrict, const wchar_t * __restrict);
127wchar_t *wcschr(const wchar_t *, wchar_t);
128int wcscmp(const wchar_t *, const wchar_t *);
129int wcscoll(const wchar_t *, const wchar_t *);
130wchar_t *wcscpy(wchar_t * __restrict, const wchar_t * __restrict);
131size_t wcscspn(const wchar_t *, const wchar_t *);
132size_t wcslen(const wchar_t *);
133wchar_t *wcsncat(wchar_t * __restrict, const wchar_t * __restrict,
134 size_t)
135 __attribute__ ((__bounded__(__wcstring__,1,3)));
136int wcsncmp(const wchar_t *, const wchar_t *, size_t);
137wchar_t *wcsncpy(wchar_t * __restrict , const wchar_t * __restrict,
138 size_t)
139 __attribute__ ((__bounded__(__wcstring__,1,3)));
140wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
141wchar_t *wcsrchr(const wchar_t *, wchar_t);
142size_t wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
143 mbstate_t * __restrict)
144 __attribute__ ((__bounded__(__wcstring__,1,3)));
145size_t wcsspn(const wchar_t *, const wchar_t *);
146wchar_t *wcsstr(const wchar_t *, const wchar_t *);
147wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict,
148 wchar_t ** __restrict);
149size_t wcsxfrm(wchar_t *, const wchar_t *, size_t);
150wchar_t *wcswcs(const wchar_t *, const wchar_t *);
151wchar_t *wmemchr(const wchar_t *, wchar_t, size_t);
152int wmemcmp(const wchar_t *, const wchar_t *, size_t);
153wchar_t *wmemcpy(wchar_t * __restrict, const wchar_t * __restrict,
154 size_t)
155 __attribute__ ((__bounded__(__wcstring__,1,3)))
156 __attribute__ ((__bounded__(__wcstring__,2,3)));
157wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t)
158 __attribute__ ((__bounded__(__wcstring__,1,3)))
159 __attribute__ ((__bounded__(__wcstring__,2,3)));
160wchar_t *wmemset(wchar_t *, wchar_t, size_t)
161 __attribute__ ((__bounded__(__wcstring__,1,3)));
162
163int wcswidth(const wchar_t *, size_t);
164int wctob(wint_t);
165int wcwidth(wchar_t);
166
167double wcstod(const wchar_t * __restrict, wchar_t ** __restrict);
168long int wcstol(const wchar_t * __restrict, wchar_t ** __restrict, int base);
169unsigned long int wcstoul(const wchar_t * __restrict, wchar_t ** __restrict,
170 int base);
171
172#if __POSIX_VISIBLE >= 200809
173FILE *open_wmemstream(wchar_t **, size_t *);
174
175int wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
176wchar_t *wcsdup(const wchar_t *);
177int wcscasecmp(const wchar_t *, const wchar_t *);
178int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t);
179size_t wcsnlen(const wchar_t *, size_t);
180int wcsncasecmp(const wchar_t *, const wchar_t *, size_t);
181int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t);
182size_t wcsxfrm_l(wchar_t *, const wchar_t *, size_t, locale_t);
183
184size_t mbsnrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
185 size_t, mbstate_t * __restrict)
186 __attribute__ ((__bounded__(__wcstring__,1,4)));
187size_t wcsnrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
188 size_t, mbstate_t * __restrict)
189 __attribute__ ((__bounded__(__wcstring__,1,4)));
190#endif
191
192#if __ISO_C_VISIBLE >= 1999
193float wcstof(const wchar_t * __restrict, wchar_t ** __restrict);
194long double wcstold(const wchar_t * __restrict, wchar_t ** __restrict);
195
196struct tm;
197size_t wcsftime(wchar_t * __restrict, size_t, const wchar_t *__restrict,
198 const struct tm *__restrict);
199#endif
200
201#if !defined(__STRICT_ANSI__) || __ISO_C_VISIBLE >= 1999
202long long int wcstoll(const wchar_t * __restrict,
203 wchar_t ** __restrict, int base);
204unsigned long long int wcstoull(const wchar_t * __restrict,
205 wchar_t ** __restrict, int base);
206#endif
207
208wint_t ungetwc(wint_t, FILE *);
209wint_t fgetwc(FILE *);
210wchar_t *fgetws(wchar_t * __restrict, int, FILE * __restrict)
211 __attribute__ ((__bounded__(__wcstring__,1,2)));
212wint_t getwc(FILE *);
213wint_t getwchar(void);
214wint_t fputwc(wchar_t, FILE *);
215int fputws(const wchar_t * __restrict, FILE * __restrict);
216wint_t putwc(wchar_t, FILE *);
217wint_t putwchar(wchar_t);
218
219int fwide(FILE *, int);
220
221int fwprintf(FILE * __restrict, const wchar_t * __restrict, ...);
222int swprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict, ...);
223int vfwprintf(FILE * __restrict, const wchar_t * __restrict, __va_list);
224int vswprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict,
225 __va_list);
226int vwprintf(const wchar_t * __restrict, __va_list);
227int wprintf(const wchar_t * __restrict, ...);
228
229int fwscanf(FILE * __restrict, const wchar_t * __restrict, ...);
230int swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...);
231int vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list);
232int vswscanf(const wchar_t * __restrict, const wchar_t * __restrict, __va_list);
233int vwscanf(const wchar_t * __restrict, __va_list);
234int wscanf(const wchar_t * __restrict, ...);
235
236#if __POSIX_VISIBLE >= 202405 || __BSD_VISIBLE
237size_t wcslcat(wchar_t * __restrict, const wchar_t * __restrict, size_t)
238 __attribute__ ((__bounded__(__wcstring__,1,3)));
239size_t wcslcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t)
240 __attribute__ ((__bounded__(__wcstring__,1,3)));
241#endif
242
243#if __BSD_VISIBLE
244wchar_t *fgetwln(FILE * __restrict, size_t * __restrict);
245#endif
246
247#define getwc(f) fgetwc(f)
248#define getwchar() getwc((FILE *)__stdin)
249#define putwc(wc, f) fputwc((wc), (f))
250#define putwchar(wc) putwc((wc), (FILE *)__stdout)
251__END_DECLS
252
253#endif /* !_WCHAR_H_ */