wchar.h revision 1.20
1/*	$OpenBSD: wchar.h,v 1.20 2011/10/16 13:20:51 stsp 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/_types.h>
64
65#ifndef	NULL
66#ifdef	__GNUG__
67#define	NULL	__null
68#elif defined(__cplusplus)
69#define	NULL	0L
70#else
71#define	NULL	((void *)0)
72#endif
73#endif
74
75#include <stdio.h> /* for FILE* */
76
77#if !defined(_WCHAR_T_DEFINED_) && !defined(__cplusplus)
78#define _WCHAR_T_DEFINED_
79typedef	__wchar_t	wchar_t;
80#endif
81
82#ifndef	_MBSTATE_T_DEFINED_
83#define	_MBSTATE_T_DEFINED_
84typedef	__mbstate_t	mbstate_t;
85#endif
86
87#ifndef	_WINT_T_DEFINED_
88#define	_WINT_T_DEFINED_
89typedef	__wint_t	wint_t;
90#endif
91
92#ifndef	_SIZE_T_DEFINED_
93#define	_SIZE_T_DEFINED_
94typedef	__size_t	size_t;
95#endif
96
97#ifndef WEOF
98#define	WEOF 	((wint_t)-1)
99#endif
100
101__BEGIN_DECLS
102wint_t	btowc(int);
103size_t	mbrlen(const char * __restrict, size_t, mbstate_t * __restrict);
104size_t	mbrtowc(wchar_t * __restrict, const char * __restrict, size_t,
105	    mbstate_t * __restrict);
106int	mbsinit(const mbstate_t *);
107size_t	mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t,
108	    mbstate_t * __restrict);
109size_t	wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict);
110wchar_t	*wcscat(wchar_t * __restrict, const wchar_t * __restrict);
111wchar_t	*wcschr(const wchar_t *, wchar_t);
112int	wcscmp(const wchar_t *, const wchar_t *);
113int	wcscoll(const wchar_t *, const wchar_t *);
114wchar_t	*wcscpy(wchar_t * __restrict, const wchar_t * __restrict);
115size_t	wcscspn(const wchar_t *, const wchar_t *);
116size_t	wcslen(const wchar_t *);
117wchar_t	*wcsncat(wchar_t * __restrict, const wchar_t * __restrict,
118	    size_t);
119int	wcsncmp(const wchar_t *, const wchar_t *, size_t);
120wchar_t	*wcsncpy(wchar_t * __restrict , const wchar_t * __restrict,
121	    size_t);
122wchar_t	*wcspbrk(const wchar_t *, const wchar_t *);
123wchar_t	*wcsrchr(const wchar_t *, wchar_t);
124size_t	wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
125	    mbstate_t * __restrict);
126size_t	wcsspn(const wchar_t *, const wchar_t *);
127wchar_t	*wcsstr(const wchar_t *, const wchar_t *);
128wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict,
129		     wchar_t ** __restrict);
130size_t	wcsxfrm(wchar_t *, const wchar_t *, size_t);
131wchar_t	*wcswcs(const wchar_t *, const wchar_t *);
132wchar_t	*wmemchr(const wchar_t *, wchar_t, size_t);
133int	wmemcmp(const wchar_t *, const wchar_t *, size_t);
134wchar_t	*wmemcpy(wchar_t * __restrict, const wchar_t * __restrict,
135	    size_t);
136wchar_t	*wmemmove(wchar_t *, const wchar_t *, size_t);
137wchar_t	*wmemset(wchar_t *, wchar_t, size_t);
138
139size_t	wcslcat(wchar_t *, const wchar_t *, size_t);
140size_t	wcslcpy(wchar_t *, const wchar_t *, size_t);
141int	wcswidth(const wchar_t *, size_t);
142int	wctob(wint_t);
143int	wcwidth(wchar_t);
144
145double wcstod(const wchar_t * __restrict, wchar_t ** __restrict);
146long int wcstol(const wchar_t * __restrict, wchar_t ** __restrict, int base);
147unsigned long int wcstoul(const wchar_t * __restrict, wchar_t ** __restrict,
148		int base);
149
150#if __POSIX_VISIBLE >= 200809
151wchar_t	*wcsdup(const wchar_t *);
152int wcscasecmp(const wchar_t *, const wchar_t *);
153int wcsncasecmp(const wchar_t *, const wchar_t *, size_t);
154#endif
155
156#if __ISO_C_VISIBLE >= 1999
157float	wcstof(const wchar_t * __restrict, wchar_t ** __restrict);
158long double wcstold(const wchar_t * __restrict, wchar_t ** __restrict);
159#endif
160
161#if (defined(__GNUC__) && __GNUC__ >= 2 && !defined(__STRICT_ANSI__)) || \
162    __ISO_C_VISIBLE >= 1999
163/* LONGLONG */
164long long int wcstoll(const wchar_t * __restrict,
165	wchar_t ** __restrict, int base);
166/* LONGLONG */
167unsigned long long int wcstoull(const wchar_t * __restrict,
168	wchar_t ** __restrict, int base);
169#endif
170
171wint_t ungetwc(wint_t, FILE *);
172wint_t fgetwc(FILE *);
173wchar_t *fgetws(wchar_t * __restrict, int, FILE * __restrict);
174wint_t getwc(FILE *);
175wint_t getwchar(void);
176wint_t fputwc(wchar_t, FILE *);
177int fputws(const wchar_t * __restrict, FILE * __restrict);
178wint_t putwc(wchar_t, FILE *);
179wint_t putwchar(wchar_t);
180
181int fwide(FILE *, int);
182
183int fwprintf(FILE * __restrict, const wchar_t * __restrict, ...);
184int swprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict, ...);
185int vfwprintf(FILE * __restrict, const wchar_t * __restrict, __va_list);
186int vswprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict,
187	__va_list);
188int vwprintf(const wchar_t * __restrict, __va_list);
189int wprintf(const wchar_t * __restrict, ...);
190
191int fwscanf(FILE * __restrict, const wchar_t * __restrict, ...);
192int swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...);
193int vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list);
194int vswscanf(const wchar_t * __restrict, const wchar_t * __restrict, __va_list);
195int vwscanf(const wchar_t * __restrict, __va_list);
196int wscanf(const wchar_t * __restrict, ...);
197
198#define getwc(f) fgetwc(f)
199#define getwchar() getwc(stdin)
200#define putwc(wc, f) fputwc((wc), (f))
201#define putwchar(wc) putwc((wc), stdout)
202__END_DECLS
203
204#endif /* !_WCHAR_H_ */
205