xlocale.h revision 227753
1227753Stheraven/*-
2227753Stheraven * Copyright (c) 2011 The FreeBSD Foundation
3227753Stheraven * All rights reserved.
4227753Stheraven *
5227753Stheraven * This software was developed by David Chisnall under sponsorship from
6227753Stheraven * the FreeBSD Foundation.
7227753Stheraven *
8227753Stheraven * Redistribution and use in source and binary forms, with or without
9227753Stheraven * modification, are permitted provided that the following conditions
10227753Stheraven * are met:
11227753Stheraven * 1.  Redistributions of source code must retain the above copyright notice,
12227753Stheraven * this list of conditions and the following disclaimer.
13227753Stheraven * 2. Redistributions in binary form must reproduce the above copyright notice,
14227753Stheraven *    this list of conditions and the following disclaimer in the documentation
15227753Stheraven *    and/or other materials provided with the distribution.
16227753Stheraven *
17227753Stheraven * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18227753Stheraven * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19227753Stheraven * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20227753Stheraven * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21227753Stheraven * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22227753Stheraven * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23227753Stheraven * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24227753Stheraven * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25227753Stheraven * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26227753Stheraven * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27227753Stheraven * SUCH DAMAGE.
28227753Stheraven *
29227753Stheraven * $FreeBSD: head/include/xlocale.h 227753 2011-11-20 14:45:42Z theraven $
30227753Stheraven */
31227753Stheraven
32227753Stheraven#ifndef _XLOCALE_H_
33227753Stheraven#define _XLOCALE_H_
34227753Stheraven
35227753Stheraven#include <locale.h>
36227753Stheraven
37227753Stheraven__BEGIN_DECLS
38227753Stheraven
39227753Stheraven/*
40227753Stheraven * Extended locale versions of the locale-aware functions from string.h.
41227753Stheraven *
42227753Stheraven * Include <string.h> before <xlocale.h> to expose these.
43227753Stheraven */
44227753Stheraven#ifdef _STRING_H_
45227753Stheravenint	 strcoll_l(const char *, const char *, locale_t);
46227753Stheravensize_t	 strxfrm_l(char *, const char *, size_t, locale_t);
47227753Stheravenint	 strcasecmp_l(const char *, const char *, locale_t);
48227753Stheravenchar	*strcasestr_l(const char *, const char *, locale_t);
49227753Stheravenint	 strncasecmp_l(const char *, const char *, size_t, locale_t);
50227753Stheraven#endif
51227753Stheraven/*
52227753Stheraven * Extended locale versions of the locale-aware functions from inttypes.h.
53227753Stheraven *
54227753Stheraven * Include <inttypes.h> before <xlocale.h> to expose these.
55227753Stheraven */
56227753Stheraven#ifdef _INTTYPES_H_
57227753Stheravenintmax_t
58227753Stheravenstrtoimax_l(const char * __restrict, char ** __restrict, int, locale_t);
59227753Stheravenuintmax_t
60227753Stheravenstrtoumax_l(const char * __restrict, char ** __restrict, int, locale_t);
61227753Stheravenintmax_t
62227753Stheravenwcstoimax_l(const wchar_t * __restrict, wchar_t ** __restrict, int , locale_t);
63227753Stheravenuintmax_t
64227753Stheravenwcstoumax_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
65227753Stheraven#endif
66227753Stheraven/*
67227753Stheraven * Extended locale versions of the locale-aware functions from monetary.h.
68227753Stheraven *
69227753Stheraven * Include <monetary.h> before <xlocale.h> to expose these.
70227753Stheraven */
71227753Stheraven#ifdef _MONETARY_H_
72227753Stheravenssize_t strfmon_l(char *, size_t, locale_t, const char *, ...)
73227753Stheraven#	if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7
74227753Stheraven	__attribute__((__format__ (__strfmon__, 4, 5)))
75227753Stheraven#	endif
76227753Stheraven	;
77227753Stheraven#endif
78227753Stheraven
79227753Stheraven/*
80227753Stheraven * Extended locale versions of the locale-aware functions from stdlib.h.
81227753Stheraven *
82227753Stheraven * Include <stdlib.h> before <xlocale.h> to expose these.
83227753Stheraven */
84227753Stheraven#ifdef _STDLIB_H_
85227753Stheravendouble	 atof_l(const char *, locale_t);
86227753Stheravenint	 atoi_l(const char *, locale_t);
87227753Stheravenlong	 atol_l(const char *, locale_t);
88227753Stheravenlong long	 atoll_l(const char *, locale_t);
89227753Stheravenint	 mblen_l(const char *, size_t, locale_t);
90227753Stheravensize_t
91227753Stheravenmbstowcs_l(wchar_t * __restrict, const char * __restrict, size_t, locale_t);
92227753Stheravenint
93227753Stheravenmbtowc_l(wchar_t * __restrict, const char * __restrict, size_t, locale_t);
94227753Stheravendouble	 strtod_l(const char *, char **, locale_t);
95227753Stheravenfloat	 strtof_l(const char *, char **, locale_t);
96227753Stheravenlong	 strtol_l(const char *, char **, int, locale_t);
97227753Stheravenlong	 double strtold_l(const char *, char **, locale_t);
98227753Stheravenlong long	 strtoll_l(const char *, char **, int, locale_t);
99227753Stheravenunsigned long	 strtoul_l(const char *, char **, int, locale_t);
100227753Stheravenunsigned long long	 strtoull_l(const char *, char **, int, locale_t);
101227753Stheravensize_t
102227753Stheravenwcstombs_l(char * __restrict, const wchar_t * __restrict, size_t, locale_t);
103227753Stheravenint	 wctomb_l(char *, wchar_t, locale_t);
104227753Stheraven
105227753Stheravenint	 ___mb_cur_max_l(locale_t);
106227753Stheraven#define MB_CUR_MAX_L(x) (___mb_cur_max_l(x))
107227753Stheraven
108227753Stheraven#endif
109227753Stheraven/*
110227753Stheraven * Extended locale versions of the locale-aware functions from time.h.
111227753Stheraven *
112227753Stheraven * Include <time.h> before <xlocale.h> to expose these.
113227753Stheraven */
114227753Stheraven#ifdef _TIME_H_
115227753Stheravensize_t
116227753Stheravenstrftime_l(char * __restrict, size_t, const char * __restrict, const
117227753Stheraven           struct tm * __restrict, locale_t)
118227753Stheraven#	if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7
119227753Stheraven	__attribute__((__format__ (__strftime__, 3, 0)))
120227753Stheraven#	endif
121227753Stheraven	;
122227753Stheravenchar *
123227753Stheravenstrptime_l(const char * __restrict, const char * __restrict,
124227753Stheraven           struct tm * __restrict, locale_t);
125227753Stheraven#endif
126227753Stheraven#ifdef _LANGINFO_H_
127227753Stheravenchar	*nl_langinfo_l(nl_item, locale_t);
128227753Stheraven#endif
129227753Stheraven#ifdef _CTYPE_H_
130227753Stheraven#include <_xlocale_ctype.h>
131227753Stheraven#endif
132227753Stheraven#ifdef _WCTYPE_H_
133227753Stheraven#define XLOCALE_WCTYPES 1
134227753Stheraven#include <_xlocale_ctype.h>
135227753Stheraven#endif
136227753Stheraven
137227753Stheraven#ifdef _STDIO_H_
138227753Stheravenint	 fprintf_l(FILE * __restrict, locale_t, const char * __restrict, ...)
139227753Stheraven		__printflike(3, 4);
140227753Stheravenint	 fscanf_l(FILE * __restrict, locale_t, const char * __restrict, ...)
141227753Stheraven		__scanflike(3, 4);
142227753Stheravenint	 printf_l(locale_t, const char * __restrict, ...) __printflike(2, 3);
143227753Stheravenint	 scanf_l(locale_t, const char * __restrict, ...) __scanflike(2, 3);
144227753Stheravenint	 sprintf_l(char * __restrict, locale_t, const char * __restrict, ...)
145227753Stheraven		__printflike(3, 4);
146227753Stheravenint	 sscanf_l(const char * __restrict, locale_t, const char * __restrict, ...)
147227753Stheraven		__scanflike(3, 4);
148227753Stheravenint	 vfprintf_l(FILE * __restrict, locale_t, const char * __restrict, __va_list)
149227753Stheraven		__printflike(3, 0);
150227753Stheravenint	 vprintf_l(locale_t, const char * __restrict, __va_list) __printflike(2, 0);
151227753Stheravenint	 vsprintf_l(char * __restrict, locale_t, const char * __restrict, __va_list)
152227753Stheraven		__printflike(3, 0);
153227753Stheraven
154227753Stheravenint	 snprintf_l(char * __restrict, size_t, locale_t, const char * __restrict,
155227753Stheraven		...) __printflike(4, 5);
156227753Stheravenint	 vfscanf_l(FILE * __restrict, locale_t, const char * __restrict, __va_list)
157227753Stheraven		__scanflike(3, 0);
158227753Stheravenint	 vscanf_l(locale_t, const char * __restrict, __va_list) __scanflike(2, 0);
159227753Stheravenint	 vsnprintf_l(char * __restrict, size_t, locale_t, const char * __restrict,
160227753Stheraven		va_list) __printflike(4, 0);
161227753Stheravenint	 vsscanf_l(const char * __restrict, locale_t, const char * __restrict,
162227753Stheraven		va_list) __scanflike(3, 0);
163227753Stheravenint	 dprintf_l(int, locale_t, const char * __restrict, ...) __printflike(3, 4);
164227753Stheravenint	 vdprintf_l(int, locale_t, const char * __restrict, __va_list)
165227753Stheraven		__printflike(3, 0);
166227753Stheravenint	 asprintf_l(char **, locale_t, const char *, ...) __printflike(3, 4);
167227753Stheravenint	 vasprintf_l(char **, locale_t, const char *, __va_list) __printflike(3, 0);
168227753Stheraven#endif
169227753Stheraven#ifdef _WCHAR_H_
170227753Stheravenwint_t	 btowc_l(int, locale_t);
171227753Stheravenwint_t	 fgetwc_l(FILE *, locale_t);
172227753Stheravenwchar_t *
173227753Stheravenfgetws_l(wchar_t * __restrict, int, FILE * __restrict, locale_t);
174227753Stheravenwint_t	 fputwc_l(wchar_t, FILE *, locale_t);
175227753Stheravenint
176227753Stheravenfputws_l(const wchar_t * __restrict, FILE * __restrict, locale_t);
177227753Stheravenint
178227753Stheravenfwprintf_l(FILE * __restrict, locale_t, const wchar_t * __restrict,
179227753Stheraven		...);
180227753Stheravenint
181227753Stheravenfwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, ...);
182227753Stheravenwint_t	 getwc_l(FILE *, locale_t);
183227753Stheravenwint_t	 getwchar_l(locale_t);
184227753Stheravensize_t
185227753Stheravenmbrlen_l(const char * __restrict, size_t, mbstate_t * __restrict, locale_t);
186227753Stheravensize_t
187227753Stheravenmbrtowc_l(wchar_t * __restrict, const char * __restrict, size_t,
188227753Stheraven		mbstate_t * __restrict, locale_t);
189227753Stheravenint	 mbsinit_l(const mbstate_t *, locale_t);
190227753Stheravensize_t
191227753Stheravenmbsrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t,
192227753Stheraven		mbstate_t * __restrict, locale_t);
193227753Stheravenwint_t	 putwc_l(wchar_t, FILE *, locale_t);
194227753Stheravenwint_t	 putwchar_l(wchar_t, locale_t);
195227753Stheravenint
196227753Stheravenswprintf_l(wchar_t * __restrict, size_t n, locale_t,
197227753Stheraven		const wchar_t * __restrict, ...);
198227753Stheravenint
199227753Stheravenswscanf_l(const wchar_t * __restrict, locale_t, const wchar_t * __restrict,
200227753Stheraven		...);
201227753Stheravenwint_t	 ungetwc_l(wint_t, FILE *, locale_t);
202227753Stheravenint
203227753Stheravenvfwprintf_l(FILE * __restrict, locale_t, const wchar_t * __restrict,
204227753Stheraven		__va_list);
205227753Stheravenint
206227753Stheravenvswprintf_l(wchar_t * __restrict, size_t n, locale_t,
207227753Stheraven		const wchar_t * __restrict, __va_list);
208227753Stheravenint	 vwprintf_l(locale_t, const wchar_t * __restrict, __va_list);
209227753Stheravensize_t
210227753Stheravenwcrtomb_l(char * __restrict, wchar_t, mbstate_t * __restrict, locale_t);
211227753Stheravenint	 wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
212227753Stheravensize_t
213227753Stheravenwcsftime_l(wchar_t * __restrict, size_t, const wchar_t * __restrict,
214227753Stheraven		const struct tm * __restrict, locale_t);
215227753Stheravensize_t
216227753Stheravenwcsrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t,
217227753Stheraven		mbstate_t * __restrict, locale_t);
218227753Stheravendouble	 wcstod_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t);
219227753Stheravenlong
220227753Stheravenwcstol_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
221227753Stheravenunsigned long
222227753Stheravenwcstoul_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
223227753Stheravenint	 wcswidth_l(const wchar_t *, size_t, locale_t);
224227753Stheravensize_t
225227753Stheravenwcsxfrm_l(wchar_t * __restrict, const wchar_t * __restrict, size_t, locale_t);
226227753Stheravenint	 wctob_l(wint_t, locale_t);
227227753Stheravenint	 wcwidth_l(wchar_t, locale_t);
228227753Stheravenint	 wprintf_l(locale_t, const wchar_t * __restrict, ...);
229227753Stheravenint	 wscanf_l(locale_t, const wchar_t * __restrict, ...);
230227753Stheraven
231227753Stheravenint
232227753Stheravenvfwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict,
233227753Stheraven		__va_list);
234227753Stheravenint	 vswscanf_l(const wchar_t * __restrict, locale_t,
235227753Stheravenconst wchar_t	*__restrict, __va_list);
236227753Stheravenint	 vwscanf_l(locale_t, const wchar_t * __restrict, __va_list);
237227753Stheravenfloat 	wcstof_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t);
238227753Stheravenlong double
239227753Stheravenwcstold_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t);
240227753Stheravenlong long
241227753Stheravenwcstoll_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
242227753Stheravenunsigned long long
243227753Stheravenwcstoull_l(const wchar_t * __restrict, wchar_t ** __restrict, int, locale_t);
244227753Stheravensize_t
245227753Stheravenmbsnrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t, size_t,
246227753Stheraven		mbstate_t * __restrict, locale_t);
247227753Stheravenint	 wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t);
248227753Stheravenint	 wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t);
249227753Stheravensize_t
250227753Stheravenwcsnrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t, size_t,
251227753Stheraven		mbstate_t * __restrict, locale_t);
252227753Stheraven
253227753Stheraven#endif
254227753Stheraven
255227753Stheravenstruct lconv	*localeconv_l(locale_t);
256227753Stheraven__END_DECLS
257227753Stheraven
258227753Stheraven#endif
259