Home | History | Annotate | Download | only in head
      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, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 #ifndef _INTTYPES_H
     28 #define	_INTTYPES_H
     29 
     30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31 
     32 /*
     33  * This file, <inttypes.h>, is specified by the ISO C standard,
     34  * standard, ISO/IEC 9899:1999 Programming language - C and is
     35  * also defined by SUSv3.
     36  *
     37  * ISO	  International Organization for Standardization.
     38  * SUSv3  Single Unix Specification, Version 3
     39  */
     40 
     41 #include <sys/feature_tests.h>
     42 #include <sys/inttypes.h>
     43 
     44 #if (!defined(_XOPEN_SOURCE) || defined(_XPG6)) || defined(_STDC_C99) || \
     45 	defined(__EXTENSIONS__)
     46 #include <sys/stdint.h>
     47 #endif
     48 
     49 #ifdef __cplusplus
     50 extern "C" {
     51 #endif
     52 
     53 /* Inclusion of <stddef.h> breaks namespace, therefore define wchar_t */
     54 
     55 /*
     56  * wchar_t is a built-in type in standard C++ and as such is not
     57  * defined here when using standard C++. However, the GNU compiler
     58  * fixincludes utility nonetheless creates its own version of this
     59  * header for use by gcc and g++. In that version it adds a redundant
     60  * guard for __cplusplus. To avoid the creation of a gcc/g++ specific
     61  * header we need to include the following magic comment:
     62  *
     63  * we must use the C++ compiler's type
     64  *
     65  * The above comment should not be removed or changed until GNU
     66  * gcc/fixinc/inclhack.def is updated to bypass this header.
     67  */
     68 #if !defined(__cplusplus) || (__cplusplus < 199711L && !defined(__GNUG__))
     69 #ifndef _WCHAR_T
     70 #define	_WCHAR_T
     71 #if defined(_LP64)
     72 typedef	int	wchar_t;
     73 #else
     74 typedef	long	wchar_t;
     75 #endif
     76 #endif	/* !_WCHAR_T */
     77 #endif	/* !__cplusplus || (__cplusplus < 199711L && !__GNUG__) */
     78 
     79 #if (!defined(_XOPEN_SOURCE) || defined(_XPG6)) || defined(_STDC_C99) || \
     80 	defined(__EXTENSIONS__)
     81 typedef struct {
     82 	intmax_t quot;
     83 	intmax_t rem;
     84 } imaxdiv_t;
     85 #endif /* (!defined(_XOPEN_SOURCE) || defined(_XPG6)) ... */
     86 
     87 #if !defined(_LP64) && !defined(_LONGLONG_TYPE)
     88 #ifdef __PRAGMA_REDEFINE_EXTNAME
     89 #pragma	redefine_extname imaxabs	_imaxabs_c89
     90 #pragma	redefine_extname imaxdiv	_imaxdiv_c89
     91 #pragma	redefine_extname strtoimax	_strtoimax_c89
     92 #pragma	redefine_extname strtoumax	_strtoumax_c89
     93 #pragma	redefine_extname wcstoimax	_wcstoimax_c89
     94 #pragma	redefine_extname wcstoumax	_wcstoumax_c89
     95 #else
     96 #define	imaxabs		_imaxabs_c89
     97 #define	imaxdiv		_imaxdiv_c89
     98 #define	strtoimax	_strtoimax_c89
     99 #define	strtoumax	_strtoumax_c89
    100 #define	wcstoimax	_wcstoimax_c89
    101 #define	wcstoumax	_wcstoumax_c89
    102 #endif
    103 #endif /* !defined(_LP64) && !defined(_LONGLONG_TYPE) */
    104 
    105 #if (!defined(_XOPEN_SOURCE) || defined(_XPG6)) || defined(_STDC_C99) || \
    106 	defined(__EXTENSIONS__)
    107 
    108 #ifdef __STDC__
    109 extern intmax_t  imaxabs(intmax_t);
    110 extern imaxdiv_t imaxdiv(intmax_t, intmax_t);
    111 extern intmax_t  strtoimax(const char *_RESTRICT_KYWD, char **_RESTRICT_KYWD,
    112 	int);
    113 extern uintmax_t strtoumax(const char *_RESTRICT_KYWD, char **_RESTRICT_KYWD,
    114 	int);
    115 extern intmax_t  wcstoimax(const wchar_t *_RESTRICT_KYWD,
    116 	wchar_t **_RESTRICT_KYWD, int);
    117 extern uintmax_t wcstoumax(const wchar_t *_RESTRICT_KYWD,
    118 	wchar_t **_RESTRICT_KYWD, int);
    119 #else
    120 extern intmax_t  imaxabs();
    121 extern imaxdiv_t imaxdiv();
    122 extern intmax_t  strtoimax();
    123 extern uintmax_t strtoumax();
    124 extern intmax_t  wcstoimax();
    125 extern uintmax_t wcstoumax();
    126 #endif
    127 
    128 #endif /* (!defined(_XOPEN_SOURCE) || defined(_XPG6)) ... */
    129 
    130 #ifdef __cplusplus
    131 }
    132 #endif
    133 
    134 #endif /* _INTTYPES_H */
    135