1/*	$OpenBSD: wchar.h,v 1.31 2017/09/05 03:16:13 schwarze 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_
70typedef	__wchar_t	wchar_t;
71#endif
72
73#ifndef	_MBSTATE_T_DEFINED_
74#define	_MBSTATE_T_DEFINED_
75typedef	__mbstate_t	mbstate_t;
76#endif
77
78#ifndef	_WINT_T_DEFINED_
79#define	_WINT_T_DEFINED_
80typedef	__wint_t	wint_t;
81#endif
82
83#ifndef	_SIZE_T_DEFINED_
84#define	_SIZE_T_DEFINED_
85typedef	__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_
102typedef void	*locale_t;
103#endif
104#endif
105
106__BEGIN_DECLS
107wint_t	btowc(int);
108size_t	mbrlen(const char * __restrict, size_t, mbstate_t * __restrict);
109size_t	mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
110	    mbstate_t * __restrict);
111int	mbsinit(const mbstate_t *);
112size_t	mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
113	    mbstate_t * __restrict)
114		__attribute__ ((__bounded__(__wcstring__,1,3)));
115size_t	wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
116wchar_t	*wcscat(wchar_t * __restrict, const wchar_t * __restrict);
117wchar_t	*wcschr(const wchar_t *, wchar_t);
118int	wcscmp(const wchar_t *, const wchar_t *);
119int	wcscoll(const wchar_t *, const wchar_t *);
120wchar_t	*wcscpy(wchar_t * __restrict, const wchar_t * __restrict);
121size_t	wcscspn(const wchar_t *, const wchar_t *);
122size_t	wcslen(const wchar_t *);
123wchar_t	*wcsncat(wchar_t * __restrict, const wchar_t * __restrict,
124	    size_t)
125		__attribute__ ((__bounded__(__wcstring__,1,3)));
126int	wcsncmp(const wchar_t *, const wchar_t *, size_t);
127wchar_t	*wcsncpy(wchar_t * __restrict , const wchar_t * __restrict,
128	    size_t)
129		__attribute__ ((__bounded__(__wcstring__,1,3)));
130wchar_t	*wcspbrk(const wchar_t *, const wchar_t *);
131wchar_t	*wcsrchr(const wchar_t *, wchar_t);
132size_t	wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
133	    mbstate_t * __restrict)
134		__attribute__ ((__bounded__(__wcstring__,1,3)));
135size_t	wcsspn(const wchar_t *, const wchar_t *);
136wchar_t	*wcsstr(const wchar_t *, const wchar_t *);
137wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict,
138		     wchar_t ** __restrict);
139size_t	wcsxfrm(wchar_t *, const wchar_t *, size_t);
140wchar_t	*wcswcs(const wchar_t *, const wchar_t *);
141wchar_t	*wmemchr(const wchar_t *, wchar_t, size_t);
142int	wmemcmp(const wchar_t *, const wchar_t *, size_t);
143wchar_t	*wmemcpy(wchar_t * __restrict, const wchar_t * __restrict,
144	    size_t)
145		__attribute__ ((__bounded__(__wcstring__,1,3)))
146		__attribute__ ((__bounded__(__wcstring__,2,3)));
147wchar_t	*wmemmove(wchar_t *, const wchar_t *, size_t)
148		__attribute__ ((__bounded__(__wcstring__,1,3)))
149		__attribute__ ((__bounded__(__wcstring__,2,3)));
150wchar_t	*wmemset(wchar_t *, wchar_t, size_t)
151		__attribute__ ((__bounded__(__wcstring__,1,3)));
152
153int	wcswidth(const wchar_t *, size_t);
154int	wctob(wint_t);
155int	wcwidth(wchar_t);
156
157double wcstod(const wchar_t * __restrict, wchar_t ** __restrict);
158long int wcstol(const wchar_t * __restrict, wchar_t ** __restrict, int base);
159unsigned long int wcstoul(const wchar_t * __restrict, wchar_t ** __restrict,
160		int base);
161
162#if __POSIX_VISIBLE >= 200809
163FILE *open_wmemstream(wchar_t **, size_t *);
164
165int wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
166wchar_t	*wcsdup(const wchar_t *);
167int wcscasecmp(const wchar_t *, const wchar_t *);
168int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t);
169int wcsncasecmp(const wchar_t *, const wchar_t *, size_t);
170int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t);
171size_t wcsxfrm_l(wchar_t *, const wchar_t *, size_t, locale_t);
172
173size_t mbsnrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
174    size_t, mbstate_t * __restrict)
175		__attribute__ ((__bounded__(__wcstring__,1,4)));
176size_t wcsnrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
177    size_t, mbstate_t * __restrict)
178		__attribute__ ((__bounded__(__wcstring__,1,4)));
179#endif
180
181#if __ISO_C_VISIBLE >= 1999
182float	wcstof(const wchar_t * __restrict, wchar_t ** __restrict);
183long double wcstold(const wchar_t * __restrict, wchar_t ** __restrict);
184
185struct tm;
186size_t wcsftime(wchar_t * __restrict, size_t, const wchar_t *__restrict,
187	const struct tm *__restrict);
188#endif
189
190#if !defined(__STRICT_ANSI__) || __ISO_C_VISIBLE >= 1999
191long long int wcstoll(const wchar_t * __restrict,
192	wchar_t ** __restrict, int base);
193unsigned long long int wcstoull(const wchar_t * __restrict,
194	wchar_t ** __restrict, int base);
195#endif
196
197wint_t ungetwc(wint_t, FILE *);
198wint_t fgetwc(FILE *);
199wchar_t *fgetws(wchar_t * __restrict, int, FILE * __restrict)
200		__attribute__ ((__bounded__(__wcstring__,1,2)));
201wint_t getwc(FILE *);
202wint_t getwchar(void);
203wint_t fputwc(wchar_t, FILE *);
204int fputws(const wchar_t * __restrict, FILE * __restrict);
205wint_t putwc(wchar_t, FILE *);
206wint_t putwchar(wchar_t);
207
208int fwide(FILE *, int);
209
210int fwprintf(FILE * __restrict, const wchar_t * __restrict, ...);
211int swprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict, ...);
212int vfwprintf(FILE * __restrict, const wchar_t * __restrict, __va_list);
213int vswprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict,
214	__va_list);
215int vwprintf(const wchar_t * __restrict, __va_list);
216int wprintf(const wchar_t * __restrict, ...);
217
218int fwscanf(FILE * __restrict, const wchar_t * __restrict, ...);
219int swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...);
220int vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list);
221int vswscanf(const wchar_t * __restrict, const wchar_t * __restrict, __va_list);
222int vwscanf(const wchar_t * __restrict, __va_list);
223int wscanf(const wchar_t * __restrict, ...);
224
225#if __BSD_VISIBLE
226wchar_t *fgetwln(FILE * __restrict, size_t * __restrict);
227size_t	wcslcat(wchar_t *, const wchar_t *, size_t)
228		__attribute__ ((__bounded__(__wcstring__,1,3)));
229size_t	wcslcpy(wchar_t *, const wchar_t *, size_t)
230		__attribute__ ((__bounded__(__wcstring__,1,3)));
231#endif
232
233#define getwc(f) fgetwc(f)
234#define getwchar() getwc(stdin)
235#define putwc(wc, f) fputwc((wc), (f))
236#define putwchar(wc) putwc((wc), stdout)
237__END_DECLS
238
239#endif /* !_WCHAR_H_ */
240