Home | History | Annotate | Download | only in iso
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*
     28  * An application should not include this header directly.  Instead it
     29  * should be included only through the inclusion of other Sun headers.
     30  *
     31  * The contents of this header is limited to identifiers specified in the
     32  * C Standard.  Any new identifiers specified in future amendments to the
     33  * C Standard must be placed in this header.  If these new identifiers
     34  * are required to also be in the C++ Standard "std" namespace, then for
     35  * anything other than macro definitions, corresponding "using" directives
     36  * must also be added to <wchar.h>.
     37  */
     38 
     39 #ifndef	_ISO_WCHAR_ISO_H
     40 #define	_ISO_WCHAR_ISO_H
     41 
     42 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     43 
     44 #include <sys/feature_tests.h>
     45 #include <stdio_tag.h>
     46 #include <wchar_impl.h>
     47 #include <iso/time_iso.h>
     48 
     49 #if (defined(__cplusplus) && (__cplusplus - 0 < 54321L)) || \
     50 	(!defined(__cplusplus) && !defined(_STRICT_STDC)) || \
     51 	defined(__EXTENSIONS__)
     52 #include <stdio.h>
     53 #endif  /*  (defined(__cplusplus) && (__cplusplus - 0 < 54321L)) ... */
     54 
     55 #if !defined(_STRICT_STDC) || defined(__EXTENSIONS__)
     56 #include <ctype.h>
     57 #include <stddef.h>
     58 #endif /* !defined(_STRICT_STDC) || defined(__EXTENSIONS__) */
     59 
     60 #include <sys/va_list.h>
     61 
     62 #ifdef	__cplusplus
     63 extern "C" {
     64 #endif
     65 
     66 #if __cplusplus >= 199711L
     67 namespace std {
     68 #endif
     69 
     70 /*
     71  * wchar_t is a built-in type in standard C++ and as such is not
     72  * defined here when using standard C++. However, the GNU compiler
     73  * fixincludes utility nonetheless creates its own version of this
     74  * header for use by gcc and g++. In that version it adds a redundant
     75  * guard for __cplusplus. To avoid the creation of a gcc/g++ specific
     76  * header we need to include the following magic comment:
     77  *
     78  * we must use the C++ compiler's type
     79  *
     80  * The above comment should not be removed or changed until GNU
     81  * gcc/fixinc/inclhack.def is updated to bypass this header.
     82  */
     83 #if !defined(__cplusplus) || (__cplusplus < 199711L && !defined(__GNUG__))
     84 #ifndef _WCHAR_T
     85 #define	_WCHAR_T
     86 #if defined(_LP64)
     87 typedef	int	wchar_t;
     88 #else
     89 typedef	long	wchar_t;
     90 #endif
     91 #endif	/* !_WCHAR_T */
     92 #endif	/* !defined(__cplusplus) ... */
     93 
     94 #if !defined(_WINT_T) || __cplusplus >= 199711L
     95 #define	_WINT_T
     96 #if defined(_LP64)
     97 typedef	int	wint_t;
     98 #else
     99 typedef	long	wint_t;
    100 #endif
    101 #endif	/* !defined(_WINT_T) || __cplusplus >= 199711L */
    102 
    103 #if !defined(_SIZE_T) || __cplusplus >= 199711L
    104 #define	_SIZE_T
    105 #if defined(_LP64) || defined(_I32LPx)
    106 typedef	unsigned long	size_t;		/* size of something in bytes */
    107 #else
    108 typedef unsigned int	size_t;		/* (historical version) */
    109 #endif
    110 #endif  /* !defined(_SIZE_T) || __cplusplus >= 199711L */
    111 
    112 #ifndef NULL
    113 #if defined(_LP64)
    114 #define	NULL	0L
    115 #else
    116 #define	NULL	0
    117 #endif
    118 #endif /* !NULL */
    119 
    120 #ifndef WEOF
    121 #if __cplusplus >= 199711L
    122 #define	WEOF	((std::wint_t)(-1))
    123 #else
    124 #define	WEOF	((wint_t)(-1))
    125 #endif
    126 #endif /* WEOF */
    127 
    128 /* not XPG4 and not XPG4v2 */
    129 #if !defined(_XPG4) || defined(_XPG5)
    130 #ifndef	WCHAR_MAX
    131 #define	WCHAR_MAX	2147483647
    132 #endif
    133 #ifndef	WCHAR_MIN
    134 #define	WCHAR_MIN	(-2147483647-1)
    135 #endif
    136 #endif /* not XPG4 and not XPG4v2 */
    137 
    138 #if !defined(_MBSTATE_T) || __cplusplus >= 199711L
    139 #define	_MBSTATE_T
    140 typedef __mbstate_t	mbstate_t;
    141 #endif	/* _MBSTATE_T */
    142 
    143 #if defined(_XPG4) && !defined(_FILEDEFED) || __cplusplus >= 199711L
    144 #define	_FILEDEFED
    145 typedef __FILE FILE;
    146 #endif
    147 
    148 #if !defined(_LP64) && !defined(_LONGLONG_TYPE)
    149 
    150 #ifdef __PRAGMA_REDEFINE_EXTNAME
    151 #pragma	redefine_extname fwprintf	_fwprintf_c89
    152 #pragma	redefine_extname swprintf	_swprintf_c89
    153 #pragma	redefine_extname vfwprintf	_vfwprintf_c89
    154 #pragma	redefine_extname vswprintf	_vswprintf_c89
    155 #pragma	redefine_extname vwprintf	_vwprintf_c89
    156 #pragma	redefine_extname wprintf	_wprintf_c89
    157 #pragma	redefine_extname fwscanf	_fwscanf_c89
    158 #pragma	redefine_extname swscanf	_swscanf_c89
    159 #pragma	redefine_extname wscanf		_wscanf_c89
    160 #else
    161 #define	fwprintf	_fwprintf_c89
    162 #define	swprintf	_swprintf_c89
    163 #define	vfwprintf	_vfwprintf_c89
    164 #define	vswprintf	_vswprintf_c89
    165 #define	vwprintf	_vwprintf_c89
    166 #define	wprintf		_wprintf_c89
    167 #define	fwscanf		_fwscanf_c89
    168 #define	swscanf		_swscanf_c89
    169 #define	wscanf		_wscanf_c89
    170 #endif
    171 
    172 #endif /* !defined(_LP64) && !defined(_LONGLONG_TYPE) */
    173 
    174 #if (!defined(_MSE_INT_H))
    175 /* not XPG4 and not XPG4v2 */
    176 #if !defined(_XPG4) || defined(_XPG5)
    177 #ifdef __PRAGMA_REDEFINE_EXTNAME
    178 #pragma redefine_extname fgetwc	__fgetwc_xpg5
    179 #pragma redefine_extname getwc	__getwc_xpg5
    180 #pragma redefine_extname getwchar	__getwchar_xpg5
    181 #pragma redefine_extname fputwc	__fputwc_xpg5
    182 #pragma redefine_extname putwc	__putwc_xpg5
    183 #pragma redefine_extname putwchar	__putwchar_xpg5
    184 #pragma redefine_extname fgetws	__fgetws_xpg5
    185 #pragma redefine_extname fputws	__fputws_xpg5
    186 #pragma redefine_extname ungetwc	__ungetwc_xpg5
    187 #else	/* __PRAGMA_REDEFINE_EXTNAME */
    188 #ifdef __STDC__
    189 extern wint_t __fgetwc_xpg5(__FILE *);
    190 extern wint_t __getwc_xpg5(__FILE *);
    191 extern wint_t __getwchar_xpg5(void);
    192 extern wint_t __fputwc_xpg5(wint_t, __FILE *);
    193 extern wint_t __putwc_xpg5(wint_t, __FILE *);
    194 extern wint_t __putwchar_xpg5(wint_t);
    195 extern wchar_t *__fgetws_xpg5(wchar_t *_RESTRICT_KYWD, int,
    196 			__FILE *_RESTRICT_KYWD);
    197 extern int __fputws_xpg5(const wchar_t *_RESTRICT_KYWD, __FILE *_RESTRICT_KYWD);
    198 extern wint_t __ungetwc_xpg5(wint_t, __FILE *);
    199 #else
    200 extern wint_t __fgetwc_xpg5();
    201 extern wint_t __getwc_xpg5();
    202 extern wint_t __getwchar_xpg5();
    203 extern wint_t __fputwc_xpg5();
    204 extern wint_t __putwc_xpg5();
    205 extern wint_t __putwchar_xpg5();
    206 extern wchar_t *__fgetws_xpg5();
    207 extern int __fputws_xpg5();
    208 extern wint_t __ungetwc_xpg5();
    209 #endif	/* __STDC__ */
    210 #define	fgetwc	__fgetwc_xpg5
    211 #define	getwc	__getwc_xpg5
    212 #define	getwchar	__getwchar_xpg5
    213 #define	fputwc	__fputwc_xpg5
    214 #define	putwc	__putwc_xpg5
    215 #define	putwchar	__putwchar_xpg5
    216 #define	fgetws	__fgetws_xpg5
    217 #define	fputws	__fputws_xpg5
    218 #define	ungetwc	__ungetwc_xpg5
    219 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
    220 #endif /* not XPG4 and not XPG4v2 */
    221 #endif /* defined(_MSE_INT_H) */
    222 
    223 #ifdef __STDC__
    224 
    225 extern wint_t fgetwc(__FILE *);
    226 extern wchar_t *fgetws(wchar_t *_RESTRICT_KYWD, int, __FILE *_RESTRICT_KYWD);
    227 extern wint_t fputwc(wint_t, __FILE *);
    228 extern int fputws(const wchar_t *_RESTRICT_KYWD, __FILE *_RESTRICT_KYWD);
    229 extern wint_t ungetwc(wint_t, __FILE *);
    230 extern wint_t getwc(__FILE *);
    231 extern wint_t getwchar(void);
    232 extern wint_t putwc(wint_t, __FILE *);
    233 extern wint_t putwchar(wint_t);
    234 extern double wcstod(const wchar_t *_RESTRICT_KYWD, wchar_t **_RESTRICT_KYWD);
    235 extern long wcstol(const wchar_t *_RESTRICT_KYWD, wchar_t **_RESTRICT_KYWD,
    236 	int);
    237 extern unsigned long wcstoul(const wchar_t *_RESTRICT_KYWD,
    238 	wchar_t **_RESTRICT_KYWD, int);
    239 extern wchar_t *wcscat(wchar_t *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD);
    240 extern int wcscmp(const wchar_t *, const wchar_t *);
    241 extern int wcscoll(const wchar_t *, const wchar_t *);
    242 extern wchar_t *wcscpy(wchar_t *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD);
    243 extern size_t wcscspn(const wchar_t *, const wchar_t *);
    244 extern size_t wcslen(const wchar_t *);
    245 extern wchar_t *wcsncat(wchar_t *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    246 	size_t);
    247 extern int wcsncmp(const wchar_t *, const wchar_t *, size_t);
    248 extern wchar_t *wcsncpy(wchar_t *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    249 	size_t);
    250 extern size_t wcsspn(const wchar_t *, const wchar_t *);
    251 extern size_t wcsxfrm(wchar_t *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    252 	size_t);
    253 #if __cplusplus >= 199711L
    254 extern const wchar_t *wcschr(const wchar_t *, wchar_t);
    255 extern "C++" {
    256 	inline wchar_t *wcschr(wchar_t *__ws, wchar_t __wc) {
    257 		return (wchar_t *)wcschr((const wchar_t *)__ws, __wc);
    258 	}
    259 }
    260 extern const wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
    261 extern "C++" {
    262 	inline wchar_t *wcspbrk(wchar_t *__ws1, const wchar_t *__ws2) {
    263 		return (wchar_t *)wcspbrk((const wchar_t *)__ws1, __ws2);
    264 	}
    265 }
    266 extern const wchar_t *wcsrchr(const wchar_t *, wchar_t);
    267 extern "C++" {
    268 	inline wchar_t *wcsrchr(wchar_t *__ws, wchar_t __wc) {
    269 		return (wchar_t *)wcsrchr((const wchar_t *)__ws, __wc);
    270 	}
    271 }
    272 #else /* __cplusplus >= 199711L */
    273 extern wchar_t *wcschr(const wchar_t *, wchar_t);
    274 extern wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
    275 extern wchar_t *wcsrchr(const wchar_t *, wchar_t);
    276 #endif /* __cplusplus >= 199711L */
    277 
    278 #if (!defined(_MSE_INT_H))
    279 #if defined(_XPG4) && !defined(_XPG5) /* XPG4 or XPG4v2 */
    280 extern wchar_t *wcstok(wchar_t *, const wchar_t *);
    281 extern size_t wcsftime(wchar_t *, size_t, const char *, const struct tm *);
    282 #else	/* XPG4 or XPG4v2 */
    283 #ifdef __PRAGMA_REDEFINE_EXTNAME
    284 #pragma redefine_extname wcstok	__wcstok_xpg5
    285 #pragma redefine_extname wcsftime	__wcsftime_xpg5
    286 extern wchar_t *wcstok(wchar_t *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    287 	wchar_t **_RESTRICT_KYWD);
    288 extern size_t wcsftime(wchar_t *_RESTRICT_KYWD, size_t,
    289 	const wchar_t *_RESTRICT_KYWD, const struct tm *_RESTRICT_KYWD);
    290 #else	/* __PRAGMA_REDEFINE_EXTNAME */
    291 extern wchar_t *__wcstok_xpg5(wchar_t *_RESTRICT_KYWD,
    292 	const wchar_t *_RESTRICT_KYWD, wchar_t **_RESTRICT_KYWD);
    293 extern size_t __wcsftime_xpg5(wchar_t *_RESTRICT_KYWD, size_t,
    294 	const wchar_t *_RESTRICT_KYWD, const struct tm *_RESTRICT_KYWD);
    295 #define	wcstok	__wcstok_xpg5
    296 #define	wcsftime	__wcsftime_xpg5
    297 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
    298 #endif	/* XPG4 or XPG4v2 */
    299 #endif	/* !defined(_MSE_INT_H) */
    300 
    301 /* not XPG4 and not XPG4v2 */
    302 #if !defined(_XPG4) || defined(_XPG5)
    303 extern wint_t	btowc(int);
    304 extern int	fwprintf(__FILE *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    305 			...);
    306 extern int	fwscanf(__FILE *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    307 			...);
    308 extern int	fwide(__FILE *, int);
    309 extern int	mbsinit(const mbstate_t *);
    310 extern size_t	mbrlen(const char *_RESTRICT_KYWD, size_t,
    311 			mbstate_t *_RESTRICT_KYWD);
    312 extern size_t	mbrtowc(wchar_t *_RESTRICT_KYWD, const char *_RESTRICT_KYWD,
    313 			size_t, mbstate_t *_RESTRICT_KYWD);
    314 extern size_t	mbsrtowcs(wchar_t *_RESTRICT_KYWD, const char **_RESTRICT_KYWD,
    315 			size_t, mbstate_t *_RESTRICT_KYWD);
    316 extern int	swprintf(wchar_t *_RESTRICT_KYWD, size_t,
    317 			const wchar_t *_RESTRICT_KYWD, ...);
    318 extern int	swscanf(const wchar_t *_RESTRICT_KYWD,
    319 			const wchar_t *_RESTRICT_KYWD, ...);
    320 extern int	vfwprintf(__FILE *_RESTRICT_KYWD, const wchar_t *_RESTRICT_KYWD,
    321 			__va_list);
    322 extern int	vwprintf(const wchar_t *_RESTRICT_KYWD, __va_list);
    323 extern int	vswprintf(wchar_t *_RESTRICT_KYWD, size_t,
    324 			const wchar_t *_RESTRICT_KYWD, __va_list);
    325 extern size_t	wcrtomb(char *_RESTRICT_KYWD, wchar_t,
    326 			mbstate_t *_RESTRICT_KYWD);
    327 extern size_t	wcsrtombs(char *_RESTRICT_KYWD, const wchar_t **_RESTRICT_KYWD,
    328 			size_t, mbstate_t *_RESTRICT_KYWD);
    329 extern int	wctob(wint_t);
    330 extern int	wmemcmp(const wchar_t *, const wchar_t *, size_t);
    331 extern wchar_t	*wmemcpy(wchar_t *_RESTRICT_KYWD,
    332 			const wchar_t *_RESTRICT_KYWD, size_t);
    333 extern wchar_t	*wmemmove(wchar_t *, const wchar_t *, size_t);
    334 extern wchar_t	*wmemset(wchar_t *, wchar_t, size_t);
    335 extern int	wprintf(const wchar_t *_RESTRICT_KYWD, ...);
    336 extern int	wscanf(const wchar_t *_RESTRICT_KYWD, ...);
    337 #if __cplusplus >= 199711L
    338 extern const wchar_t *wcsstr(const wchar_t *, const wchar_t *);
    339 extern "C++" {
    340 	inline wchar_t *wcsstr(wchar_t *__ws1, const wchar_t *__ws2) {
    341 		return (wchar_t *)wcsstr((const wchar_t *)__ws1, __ws2);
    342 	}
    343 }
    344 extern const wchar_t *wmemchr(const wchar_t *, wchar_t, size_t);
    345 extern "C++" {
    346 	inline wchar_t *wmemchr(wchar_t *__ws, wchar_t __wc, size_t __n) {
    347 		return (wchar_t *)wmemchr((const wchar_t *)__ws, __wc, __n);
    348 	}
    349 }
    350 #else /* __cplusplus >= 199711L */
    351 extern wchar_t	*wcsstr(const wchar_t *_RESTRICT_KYWD,
    352 	const wchar_t *_RESTRICT_KYWD);
    353 extern wchar_t	*wmemchr(const wchar_t *, wchar_t, size_t);
    354 #endif /* __cplusplus >= 199711L */
    355 #endif /* not XPG4 and not XPG4v2 */
    356 
    357 #else /* __STDC__ */
    358 
    359 extern  wint_t fgetwc();
    360 extern  wchar_t *fgetws();
    361 extern  wint_t fputwc();
    362 extern  int fputws();
    363 extern  wint_t  ungetwc();
    364 extern wint_t getwc();
    365 extern wint_t getwchar();
    366 extern wint_t putwc();
    367 extern wint_t putwchar();
    368 extern wint_t ungetwc();
    369 extern double wcstod();
    370 extern long wcstol();
    371 extern unsigned long wcstoul();
    372 extern wchar_t *wcscat();
    373 extern wchar_t *wcschr();
    374 extern int wcscmp();
    375 extern int wcscoll();
    376 extern wchar_t *wcscpy();
    377 extern size_t wcscspn();
    378 extern size_t wcslen();
    379 extern wchar_t *wcsncat();
    380 extern int wcsncmp();
    381 extern wchar_t *wcsncpy();
    382 extern wchar_t *wcspbrk();
    383 extern wchar_t *wcsrchr();
    384 extern size_t wcsspn();
    385 extern size_t wcsxfrm();
    386 
    387 #if (!defined(_MSE_INT_H))
    388 #if defined(_XPG4) && !defined(_XPG5) /* XPG4 or XPG4v2 */
    389 extern wchar_t *wcstok();
    390 extern size_t wcsftime();
    391 #else	/* XPG4 or XPG4v2 */
    392 #ifdef __PRAGMA_REDEFINE_EXTNAME
    393 #pragma redefine_extname wcstok	__wcstok_xpg5
    394 #pragma redefine_extname wcsftime	__wcsftime_xpg5
    395 extern wchar_t *wcstok();
    396 extern size_t wcsftime();
    397 #else	/* __PRAGMA_REDEFINE_EXTNAME */
    398 extern wchar_t *__wcstok_xpg5();
    399 extern size_t __wcsftime_xpg5();
    400 #define	wcstok	__wcstok_xpg5
    401 #define	wcsftime	__wcsftime_xpg5
    402 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
    403 #endif	/* XPG4 or XPG4v2 */
    404 #endif	/* defined(_MSE_INT_H) */
    405 
    406 /* not XPG4 and not XPG4v2 */
    407 #if (!defined(_XPG4) && !defined(_XPG4_2) || defined(_XPG5))
    408 extern wint_t	btowc();
    409 extern int	fwprintf();
    410 extern int	fwscanf();
    411 extern int	fwide();
    412 extern int	mbsinit();
    413 extern size_t	mbrlen();
    414 extern size_t	mbrtowc();
    415 extern size_t	mbsrtowcs();
    416 extern int	swprintf();
    417 extern int	swscanf();
    418 extern int	vfwprintf();
    419 extern int	vwprintf();
    420 extern int	vswprintf();
    421 extern size_t	wcrtomb();
    422 extern size_t	wcsrtombs();
    423 extern wchar_t	*wcsstr();
    424 extern int	wctob();
    425 extern wchar_t	*wmemchr();
    426 extern int	wmemcmp();
    427 extern wchar_t	*wmemcpy();
    428 extern wchar_t	*wmemmove();
    429 extern wchar_t	*wmemset();
    430 extern int	wprintf();
    431 extern int	wscanf();
    432 #endif /* not XPG4 and not XPG4v2 */
    433 
    434 #endif /* __STDC__ */
    435 
    436 #if __cplusplus >= 199711L
    437 }
    438 #endif /* end of namespace std */
    439 
    440 #ifdef	__cplusplus
    441 }
    442 #endif
    443 
    444 #endif	/* _ISO_WCHAR_ISO_H */
    445