[MKISOFS]
[reactos.git] / reactos / sdk / tools / mkisofs / schilytools / include / schily / wchar.h
1 /* @(#)wchar.h 1.21 11/07/19 Copyright 2007-2011 J. Schilling */
2 /*
3 * Abstraction from wchar.h
4 *
5 * Copyright (c) 2007-2011 J. Schilling
6 */
7 /*
8 * The contents of this file are subject to the terms of the
9 * Common Development and Distribution License, Version 1.0 only
10 * (the "License"). You may not use this file except in compliance
11 * with the License.
12 *
13 * See the file CDDL.Schily.txt in this distribution for details.
14 *
15 * When distributing Covered Code, include this CDDL HEADER in each
16 * file and include the License file CDDL.Schily.txt from this distribution.
17 */
18
19 #ifndef _SCHILY_WCHAR_H
20 #define _SCHILY_WCHAR_H
21
22 #ifndef _SCHILY_MCONFIG_H
23 #include <schily/mconfig.h>
24 #endif
25
26 #ifndef _SCHILY_STDLIB_H
27 #include <schily/stdlib.h> /* for MB_CUR_MAX, mbtowc()/wctomb() */
28 #endif
29 #ifndef _SCHILY_TYPES_H
30 #include <schily/types.h>
31 #endif
32 #ifdef HAVE_STDDEF_H
33 #ifndef _INCL_STDDEF_H
34 #include <stddef.h> /* Needed for e.g. size_t (POSIX) */
35 #define _INCL_STDDEF_H
36 #endif
37 #endif
38 #ifndef _SCHILY_STDIO_H
39 #include <schily/stdio.h> /* Needed for e.g. FILE (POSIX) */
40 #endif
41 #ifndef _SCHILY_VARARGS_H
42 #include <schily/varargs.h> /* Needed for e.g. va_list (POSIX) */
43 #endif
44
45
46 #if !defined(HAVE_MBTOWC) || !defined(HAVE_WCTOMB)
47 #if defined(HAVE_MBRTOWC) && defined(HAVE_WCRTOMB)
48 # define mbtowc(wp, cp, len) mbrtowc(wp, cp, len, (mbstate_t *)0)
49 # define wctomb(cp, wc) wcrtomb(cp, wc, (mbstate_t *)0)
50 #else
51 # define NO_WCHAR
52 #endif
53 #endif
54
55 #ifdef HAVE_WCHAR_H
56
57 #ifndef _INCL_WCHAR_H
58 #include <wchar.h>
59 #define _INCL_WCHAR_H
60 #endif
61
62 #ifndef HAVE_MBSINIT
63 #define mbsinit(sp) ((int)((sp) == 0))
64 #endif
65 #ifndef HAVE_MBRTOWC
66 #define mbrtowc(wp, cp, len, sp) mbtowc(wp, cp, len)
67 #endif
68 #ifndef HAVE_WCRTOMB
69 #define wcrtomb(cp, wc, sp) wctomb(cp, wc)
70 #endif
71
72 #ifndef USE_WCHAR
73 #define USE_WCHAR
74 #endif
75
76 #else /* HAVE_WCHAR_H */
77
78 #undef USE_WCHAR
79 #endif /* !HAVE_WCHAR_H */
80
81 #if !defined(HAVE_WCTYPE_H) && !defined(HAVE_ISWPRINT)
82 #undef USE_WCHAR
83 #undef USE_WCTYPE
84 #endif
85
86 #ifdef NO_WCTYPE
87 #undef USE_WCHAR
88 #undef USE_WCTYPE
89 #endif
90
91 #ifdef NO_WCHAR
92 #undef USE_WCHAR
93 #undef USE_WCTYPE
94 #endif
95
96 #ifndef USE_WCHAR
97
98 /*
99 * We either don't have wide chars or we don't use them...
100 */
101 #undef wchar_t
102 #define wchar_t char
103 #undef wint_t
104 #define wint_t int
105 /*
106 * We cannot define wctype_t here because of a bug in Linux (missing xctype_t
107 * definition in wchar.h
108 */
109 #ifdef __never__
110 #undef wctype_t
111 #define wctype_t int
112 #endif
113
114 #undef WEOF
115 #define WEOF ((wint_t)-1)
116
117 #ifndef _SCHILY_UTYPES_H
118 #include <schily/utypes.h> /* For TYPE_MAXVAL() */
119 #endif
120
121 #undef WCHAR_MAX
122 #define WCHAR_MAX TYPE_MAXVAL(wchar_t)
123 #undef WCHAR_MIN
124 #define WCHAR_MIN TYPE_MINVAL(wchar_t)
125
126 #undef WINT_MAX
127 #define WINT_MAX TYPE_MAXVAL(wint_t)
128 #undef WINT_MIN
129 #define WINT_MIN TYPE_MINVAL(wint_t)
130
131 #undef WCTYPE_MAX
132 #define WCTYPE_MAX TYPE_MAXVAL(wctype_t)
133 #undef WCTYPE_MIN
134 #define WCTYPE_MIN TYPE_MINVAL(wctype_t)
135
136 #undef SIZEOF_WCHAR_T
137 #define SIZEOF_WCHAR_T SIZEOF_CHAR
138
139 #undef MB_CUR_MAX
140 #define MB_CUR_MAX 1
141 #undef MB_LEN_MAX
142 #define MB_LEN_MAX 1
143
144 /*
145 * The mbtowc() for the non-multibyte case could be as simple as
146 *
147 * #define mbtowc(wp, cp, len) (*(wp) = *(cp), 1)
148 *
149 * but Mac OS X forces us to do many mbtowc(NULL, NULL, 0) calls in order
150 * to reset the internal state. On other platforms that do not support
151 * wide chars, NULL may be defined as (void *)0, so we need to check
152 * for "wp" != NULL and to cast "wp" and "cp" to their expected types.
153 */
154 #undef mbtowc
155 #define mbtowc(wp, cp, len) ((void)((wp) ? \
156 *(wchar_t *)(wp) = *(char *)(cp) : 1), 1)
157 #undef mbrtowc
158 #define mbrtowc(wp, cp, len, sp) ((void)((wp) ? \
159 *(wchar_t *)(wp) = *(char *)(cp) : 1), 1)
160 #undef wctomb
161 #define wctomb(cp, wc) (*(cp) = wc, 1)
162 #undef wcrtomb
163 #define wcrtomb(cp, wc, sp) (*(cp) = wc, 1)
164
165 #undef mbsinit
166 #define mbsinit(sp) ((int)((sp) == 0))
167
168 #undef wcwidth
169 #define wcwidth(wc) (1)
170
171 #else /* USE_WCHAR */
172
173 #ifndef HAVE_WCWIDTH
174 #undef wcwidth
175 #define wcwidth(wc) (1)
176 #endif
177
178 #endif /* USE_WCHAR */
179
180 #endif /* _SCHILY_WCHAR_H */