Annotation of embedaddon/libiconv/srclib/wchar.in.h, revision 1.1.1.1
1.1 misho 1: /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
2:
3: Copyright (C) 2007-2009 Free Software Foundation, Inc.
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License as published by
7: the Free Software Foundation; either version 3, or (at your option)
8: any later version.
9:
10: This program is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with this program; if not, write to the Free Software Foundation,
17: Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
18:
19: /* Written by Eric Blake. */
20:
21: /*
22: * ISO C 99 <wchar.h> for platforms that have issues.
23: * <http://www.opengroup.org/susv3xbd/wchar.h.html>
24: *
25: * For now, this just ensures proper prerequisite inclusion order and
26: * the declaration of wcwidth().
27: */
28:
29: #if __GNUC__ >= 3
30: @PRAGMA_SYSTEM_HEADER@
31: #endif
32:
33: #if defined __need_mbstate_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
34: /* Special invocation convention:
35: - Inside uClibc header files.
36: - On HP-UX 11.00 we have a sequence of nested includes
37: <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
38: once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
39: and once directly. In both situations 'wint_t' is not yet defined,
40: therefore we cannot provide the function overrides; instead include only
41: the system's <wchar.h>.
42: - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
43: the latter includes <wchar.h>. But here, we have no way to detect whether
44: <wctype.h> is completely included or is still being included. */
45:
46: #@INCLUDE_NEXT@ @NEXT_WCHAR_H@
47:
48: #else
49: /* Normal invocation convention. */
50:
51: #ifndef _GL_WCHAR_H
52:
53: #define _GL_ALREADY_INCLUDING_WCHAR_H
54:
55: /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
56: <wchar.h>.
57: BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
58: included before <wchar.h>. */
59: #include <stddef.h>
60: #include <stdio.h>
61: #include <time.h>
62:
63: /* Include the original <wchar.h> if it exists.
64: Some builds of uClibc lack it. */
65: /* The include_next requires a split double-inclusion guard. */
66: #if @HAVE_WCHAR_H@
67: # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
68: #endif
69:
70: #undef _GL_ALREADY_INCLUDING_WCHAR_H
71:
72: #ifndef _GL_WCHAR_H
73: #define _GL_WCHAR_H
74:
75: /* The definition of GL_LINK_WARNING is copied here. */
76:
77: #ifdef __cplusplus
78: extern "C" {
79: #endif
80:
81:
82: /* Define wint_t. (Also done in wctype.in.h.) */
83: #if !@HAVE_WINT_T@ && !defined wint_t
84: # define wint_t int
85: # ifndef WEOF
86: # define WEOF -1
87: # endif
88: #endif
89:
90:
91: /* Override mbstate_t if it is too small.
92: On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
93: implementing mbrtowc for encodings like UTF-8. */
94: #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
95: typedef int rpl_mbstate_t;
96: # undef mbstate_t
97: # define mbstate_t rpl_mbstate_t
98: # define GNULIB_defined_mbstate_t 1
99: #endif
100:
101:
102: /* Convert a single-byte character to a wide character. */
103: #if @GNULIB_BTOWC@
104: # if @REPLACE_BTOWC@
105: # undef btowc
106: # define btowc rpl_btowc
107: # endif
108: # if !@HAVE_BTOWC@ || @REPLACE_BTOWC@
109: extern wint_t btowc (int c);
110: # endif
111: #elif defined GNULIB_POSIXCHECK
112: # undef btowc
113: # define btowc(c) \
114: (GL_LINK_WARNING ("btowc is unportable - " \
115: "use gnulib module btowc for portability"), \
116: btowc (c))
117: #endif
118:
119:
120: /* Convert a wide character to a single-byte character. */
121: #if @GNULIB_WCTOB@
122: # if @REPLACE_WCTOB@
123: # undef wctob
124: # define wctob rpl_wctob
125: # endif
126: # if (!defined wctob && !@HAVE_DECL_WCTOB@) || @REPLACE_WCTOB@
127: /* wctob is provided by gnulib, or wctob exists but is not declared. */
128: extern int wctob (wint_t wc);
129: # endif
130: #elif defined GNULIB_POSIXCHECK
131: # undef wctob
132: # define wctob(w) \
133: (GL_LINK_WARNING ("wctob is unportable - " \
134: "use gnulib module wctob for portability"), \
135: wctob (w))
136: #endif
137:
138:
139: /* Test whether *PS is in the initial state. */
140: #if @GNULIB_MBSINIT@
141: # if @REPLACE_MBSINIT@
142: # undef mbsinit
143: # define mbsinit rpl_mbsinit
144: # endif
145: # if !@HAVE_MBSINIT@ || @REPLACE_MBSINIT@
146: extern int mbsinit (const mbstate_t *ps);
147: # endif
148: #elif defined GNULIB_POSIXCHECK
149: # undef mbsinit
150: # define mbsinit(p) \
151: (GL_LINK_WARNING ("mbsinit is unportable - " \
152: "use gnulib module mbsinit for portability"), \
153: mbsinit (p))
154: #endif
155:
156:
157: /* Convert a multibyte character to a wide character. */
158: #if @GNULIB_MBRTOWC@
159: # if @REPLACE_MBRTOWC@
160: # undef mbrtowc
161: # define mbrtowc rpl_mbrtowc
162: # endif
163: # if !@HAVE_MBRTOWC@ || @REPLACE_MBRTOWC@
164: extern size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
165: # endif
166: #elif defined GNULIB_POSIXCHECK
167: # undef mbrtowc
168: # define mbrtowc(w,s,n,p) \
169: (GL_LINK_WARNING ("mbrtowc is unportable - " \
170: "use gnulib module mbrtowc for portability"), \
171: mbrtowc (w, s, n, p))
172: #endif
173:
174:
175: /* Recognize a multibyte character. */
176: #if @GNULIB_MBRLEN@
177: # if @REPLACE_MBRLEN@
178: # undef mbrlen
179: # define mbrlen rpl_mbrlen
180: # endif
181: # if !@HAVE_MBRLEN@ || @REPLACE_MBRLEN@
182: extern size_t mbrlen (const char *s, size_t n, mbstate_t *ps);
183: # endif
184: #elif defined GNULIB_POSIXCHECK
185: # undef mbrlen
186: # define mbrlen(s,n,p) \
187: (GL_LINK_WARNING ("mbrlen is unportable - " \
188: "use gnulib module mbrlen for portability"), \
189: mbrlen (s, n, p))
190: #endif
191:
192:
193: /* Convert a string to a wide string. */
194: #if @GNULIB_MBSRTOWCS@
195: # if @REPLACE_MBSRTOWCS@
196: # undef mbsrtowcs
197: # define mbsrtowcs rpl_mbsrtowcs
198: # endif
199: # if !@HAVE_MBSRTOWCS@ || @REPLACE_MBSRTOWCS@
200: extern size_t mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps);
201: # endif
202: #elif defined GNULIB_POSIXCHECK
203: # undef mbsrtowcs
204: # define mbsrtowcs(d,s,l,p) \
205: (GL_LINK_WARNING ("mbsrtowcs is unportable - " \
206: "use gnulib module mbsrtowcs for portability"), \
207: mbsrtowcs (d, s, l, p))
208: #endif
209:
210:
211: /* Convert a string to a wide string. */
212: #if @GNULIB_MBSNRTOWCS@
213: # if @REPLACE_MBSNRTOWCS@
214: # undef mbsnrtowcs
215: # define mbsnrtowcs rpl_mbsnrtowcs
216: # endif
217: # if !@HAVE_MBSNRTOWCS@ || @REPLACE_MBSNRTOWCS@
218: extern size_t mbsnrtowcs (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps);
219: # endif
220: #elif defined GNULIB_POSIXCHECK
221: # undef mbsnrtowcs
222: # define mbsnrtowcs(d,s,n,l,p) \
223: (GL_LINK_WARNING ("mbsnrtowcs is unportable - " \
224: "use gnulib module mbsnrtowcs for portability"), \
225: mbsnrtowcs (d, s, n, l, p))
226: #endif
227:
228:
229: /* Convert a wide character to a multibyte character. */
230: #if @GNULIB_WCRTOMB@
231: # if @REPLACE_WCRTOMB@
232: # undef wcrtomb
233: # define wcrtomb rpl_wcrtomb
234: # endif
235: # if !@HAVE_WCRTOMB@ || @REPLACE_WCRTOMB@
236: extern size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps);
237: # endif
238: #elif defined GNULIB_POSIXCHECK
239: # undef wcrtomb
240: # define wcrtomb(s,w,p) \
241: (GL_LINK_WARNING ("wcrtomb is unportable - " \
242: "use gnulib module wcrtomb for portability"), \
243: wcrtomb (s, w, p))
244: #endif
245:
246:
247: /* Convert a wide string to a string. */
248: #if @GNULIB_WCSRTOMBS@
249: # if @REPLACE_WCSRTOMBS@
250: # undef wcsrtombs
251: # define wcsrtombs rpl_wcsrtombs
252: # endif
253: # if !@HAVE_WCSRTOMBS@ || @REPLACE_WCSRTOMBS@
254: extern size_t wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps);
255: # endif
256: #elif defined GNULIB_POSIXCHECK
257: # undef wcsrtombs
258: # define wcsrtombs(d,s,l,p) \
259: (GL_LINK_WARNING ("wcsrtombs is unportable - " \
260: "use gnulib module wcsrtombs for portability"), \
261: wcsrtombs (d, s, l, p))
262: #endif
263:
264:
265: /* Convert a wide string to a string. */
266: #if @GNULIB_WCSNRTOMBS@
267: # if @REPLACE_WCSNRTOMBS@
268: # undef wcsnrtombs
269: # define wcsnrtombs rpl_wcsnrtombs
270: # endif
271: # if !@HAVE_WCSNRTOMBS@ || @REPLACE_WCSNRTOMBS@
272: extern size_t wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps);
273: # endif
274: #elif defined GNULIB_POSIXCHECK
275: # undef wcsnrtombs
276: # define wcsnrtombs(d,s,n,l,p) \
277: (GL_LINK_WARNING ("wcsnrtombs is unportable - " \
278: "use gnulib module wcsnrtombs for portability"), \
279: wcsnrtombs (d, s, n, l, p))
280: #endif
281:
282:
283: /* Return the number of screen columns needed for WC. */
284: #if @GNULIB_WCWIDTH@
285: # if @REPLACE_WCWIDTH@
286: # undef wcwidth
287: # define wcwidth rpl_wcwidth
288: extern int wcwidth (wchar_t);
289: # else
290: # if !defined wcwidth && !@HAVE_DECL_WCWIDTH@
291: /* wcwidth exists but is not declared. */
292: extern int wcwidth (int /* actually wchar_t */);
293: # endif
294: # endif
295: #elif defined GNULIB_POSIXCHECK
296: # undef wcwidth
297: # define wcwidth(w) \
298: (GL_LINK_WARNING ("wcwidth is unportable - " \
299: "use gnulib module wcwidth for portability"), \
300: wcwidth (w))
301: #endif
302:
303:
304: #ifdef __cplusplus
305: }
306: #endif
307:
308: #endif /* _GL_WCHAR_H */
309: #endif /* _GL_WCHAR_H */
310: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>