/app/gcc-3.3.2/lib/gcc-lib/sparc-sun-solaris2.8/3.3.2/include/sys/types.h


    1 /*  DO NOT EDIT THIS FILE.
    2 
    3     It has been auto-edited by fixincludes from:
    4 
    5 	"/usr/include/sys/types.h"
    6 
    7     This had to be done to correct non-standard usages in the
    8     original, manufacturer supplied header file.  */
    9 
   10 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
   11 /*	  All Rights Reserved  	*/
   12 
   13 /*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*/
   14 /*	The copyright notice above does not evidence any   	*/
   15 /*	actual or intended publication of such source code.	*/
   16 
   17 /*
   18  * Copyright 1996-2002 by Sun Microsystems, Inc.  All rights reserved.
   19  * Use is subject to license terms.
   20  */
   21 
   22 #ifndef _SYS_TYPES_H
   23 #define	_SYS_TYPES_H
   24 
   25 #pragma ident	"@(#)types.h	1.68	02/06/10 SMI"
   26 
   27 #include <sys/isa_defs.h>
   28 #include <sys/feature_tests.h>
   29 
   30 /*
   31  * Machine dependent definitions moved to <sys/machtypes.h>.
   32  */
   33 #include <sys/machtypes.h>
   34 
   35 /*
   36  * Include fixed width type declarations proposed by the ISO/JTC1/SC22/WG14 C
   37  * committee's working draft for the revision of the current ISO C standard,
   38  * ISO/IEC 9899:1990 Programming language - C.  These are not currently
   39  * required by any standard but constitute a useful, general purpose set
   40  * of type definitions which is namespace clean with respect to all standards.
   41  */
   42 #ifdef	_KERNEL
   43 #include <sys/inttypes.h>
   44 #else	/* _KERNEL */
   45 #include <sys/int_types.h>
   46 #endif	/* _KERNEL */
   47 
   48 #if defined(_KERNEL) || defined(_SYSCALL32)
   49 #include <sys/types32.h>
   50 #endif
   51 
   52 #ifdef	__cplusplus
   53 extern "C" {
   54 #endif
   55 
   56 /*
   57  * The following protects users who use other than Sun compilers
   58  * (eg, GNU C) that don't support long long, and need to include
   59  * this header file.
   60  */
   61 #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
   62 typedef	long long		longlong_t;
   63 typedef	unsigned long long	u_longlong_t;
   64 #else
   65 /* used to reserve space and generate alignment */
   66 typedef union {
   67 	double	_d;
   68 	int32_t	_l[2];
   69 } longlong_t;
   70 typedef union {
   71 	double		_d;
   72 	uint32_t	_l[2];
   73 } u_longlong_t;
   74 #endif	/* __STDC__ - 0 == 0 && !defined(_NO_LONGLONG) */
   75 
   76 /*
   77  * These types (t_{u}scalar_t) exist because the XTI/TPI/DLPI standards had
   78  * to use them instead of int32_t and uint32_t because DEC had
   79  * shipped 64-bit wide.
   80  */
   81 #if defined(_LP64) || defined(_I32LPx)
   82 typedef int32_t		t_scalar_t;
   83 typedef uint32_t	t_uscalar_t;
   84 #else
   85 typedef long		t_scalar_t;	/* historical versions */
   86 typedef unsigned long	t_uscalar_t;
   87 #endif	/* defined(_LP64) || defined(_I32LPx) */
   88 
   89 /*
   90  * POSIX Extensions
   91  */
   92 typedef	unsigned char	uchar_t;
   93 typedef	unsigned short	ushort_t;
   94 typedef	unsigned int	uint_t;
   95 typedef	unsigned long	ulong_t;
   96 
   97 typedef	char		*caddr_t;	/* ?<core address> type */
   98 typedef	long		daddr_t;	/* <disk address> type */
   99 typedef	short		cnt_t;		/* ?<count> type */
  100 
  101 #if defined(_ILP32)	/* only used in i386 code */
  102 typedef	ulong_t		paddr_t;	/* <physical address> type */
  103 #elif defined(__ia64)	/* XXX Fix me */
  104 typedef	uint_t		paddr_t;
  105 #endif
  106 
  107 #ifndef	_PTRDIFF_T
  108 #define	_PTRDIFF_T
  109 #if defined(_LP64) || defined(_I32LPx)
  110 #if !defined(_GCC_PTRDIFF_T)
  111 #define _GCC_PTRDIFF_T
  112 typedef __PTRDIFF_TYPE__ ptrdiff_t;
  113 #endif
  114 		/* pointer difference */
  115 #else
  116 #if !defined(_GCC_PTRDIFF_T)
  117 #define _GCC_PTRDIFF_T
  118 typedef __PTRDIFF_TYPE__ ptrdiff_t;
  119 #endif
  120 		/* (historical version) */
  121 #endif
  122 #endif
  123 
  124 /*
  125  * VM-related types
  126  */
  127 typedef	ulong_t		pfn_t;		/* page frame number */
  128 typedef	ulong_t		pgcnt_t;	/* number of pages */
  129 typedef	long		spgcnt_t;	/* signed number of pages */
  130 
  131 typedef	uchar_t		use_t;		/* use count for swap.  */
  132 typedef	short		sysid_t;
  133 typedef	short		index_t;
  134 typedef void		*timeout_id_t;	/* opaque handle from timeout(9F) */
  135 typedef void		*bufcall_id_t;	/* opaque handle from bufcall(9F) */
  136 
  137 /*
  138  * The size of off_t and related types depends on the setting of
  139  * _FILE_OFFSET_BITS.  (Note that other system headers define other types
  140  * related to those defined here.)
  141  *
  142  * If _LARGEFILE64_SOURCE is defined, variants of these types that are
  143  * explicitly 64 bits wide become available.
  144  */
  145 #ifndef _OFF_T
  146 #define	_OFF_T
  147 
  148 #if defined(_LP64) || _FILE_OFFSET_BITS == 32
  149 typedef long		off_t;		/* offsets within files */
  150 #elif _FILE_OFFSET_BITS == 64
  151 typedef longlong_t	off_t;		/* offsets within files */
  152 #endif
  153 
  154 #if defined(_LARGEFILE64_SOURCE)
  155 #ifdef _LP64
  156 typedef	off_t		off64_t;	/* offsets within files */
  157 #else
  158 typedef longlong_t	off64_t;	/* offsets within files */
  159 #endif
  160 #endif	/* _LARGEFILE64_SOURCE */
  161 
  162 #endif /* _OFF_T */
  163 
  164 #if defined(_LP64) || _FILE_OFFSET_BITS == 32
  165 typedef ulong_t		ino_t;		/* expanded inode type	*/
  166 typedef long		blkcnt_t;	/* count of file blocks */
  167 typedef ulong_t		fsblkcnt_t;	/* count of file system blocks */
  168 typedef ulong_t		fsfilcnt_t;	/* count of files */
  169 #elif _FILE_OFFSET_BITS == 64
  170 typedef u_longlong_t	ino_t;		/* expanded inode type	*/
  171 typedef longlong_t	blkcnt_t;	/* count of file blocks */
  172 typedef u_longlong_t	fsblkcnt_t;	/* count of file system blocks */
  173 typedef u_longlong_t	fsfilcnt_t;	/* count of files */
  174 #endif
  175 
  176 #if defined(_LARGEFILE64_SOURCE)
  177 #ifdef _LP64
  178 typedef	ino_t		ino64_t;	/* expanded inode type */
  179 typedef	blkcnt_t	blkcnt64_t;	/* count of file blocks */
  180 typedef	fsblkcnt_t	fsblkcnt64_t;	/* count of file system blocks */
  181 typedef	fsfilcnt_t	fsfilcnt64_t;	/* count of files */
  182 #else
  183 typedef u_longlong_t	ino64_t;	/* expanded inode type	*/
  184 typedef longlong_t	blkcnt64_t;	/* count of file blocks */
  185 typedef u_longlong_t	fsblkcnt64_t;	/* count of file system blocks */
  186 typedef u_longlong_t	fsfilcnt64_t;	/* count of files */
  187 #endif
  188 #endif	/* _LARGEFILE64_SOURCE */
  189 
  190 #ifdef _LP64
  191 typedef	int		blksize_t;	/* used for block sizes */
  192 #else
  193 typedef	long		blksize_t;	/* used for block sizes */
  194 #endif
  195 
  196 #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)
  197 typedef enum { _B_FALSE, _B_TRUE } boolean_t;
  198 #else
  199 typedef enum { B_FALSE, B_TRUE } boolean_t;
  200 #endif /* defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) */
  201 
  202 /*
  203  * The [u]pad64_t is to be used in structures such that those structures
  204  * may be accessed by code produced by compilation environments which don't
  205  * support a 64 bit integral datatype.  This intention is not to allow
  206  * use of these fields in such environments, but to maintain the alignment
  207  * and offsets of the structure.
  208  */
  209 #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
  210 typedef int64_t		pad64_t;
  211 typedef	uint64_t	upad64_t;
  212 #else
  213 typedef union {
  214 	double   _d;
  215 	int32_t  _l[2];
  216 } pad64_t;
  217 typedef union {
  218 	double   _d;
  219 	uint32_t _l[2];
  220 } upad64_t;
  221 #endif
  222 
  223 typedef	longlong_t	offset_t;
  224 typedef	u_longlong_t	u_offset_t;
  225 typedef u_longlong_t	len_t;
  226 typedef	longlong_t	diskaddr_t;
  227 
  228 /*
  229  * Definitions remaining from previous partial support for 64-bit file
  230  * offsets.  This partial support for devices greater than 2gb requires
  231  * compiler support for long long.
  232  */
  233 #ifdef _LONG_LONG_LTOH
  234 typedef union {
  235 	offset_t	_f;	/* Full 64 bit offset value */
  236 	struct {
  237 		int32_t	_l;	/* lower 32 bits of offset value */
  238 		int32_t	_u;	/* upper 32 bits of offset value */
  239 	} _p;
  240 } lloff_t;
  241 #endif
  242 
  243 #ifdef _LONG_LONG_HTOL
  244 typedef union {
  245 	offset_t	_f;	/* Full 64 bit offset value */
  246 	struct {
  247 		int32_t	_u;	/* upper 32 bits of offset value */
  248 		int32_t	_l;	/* lower 32 bits of offset value */
  249 	} _p;
  250 } lloff_t;
  251 #endif
  252 
  253 #ifdef _LONG_LONG_LTOH
  254 typedef union {
  255 	diskaddr_t	_f;	/* Full 64 bit disk address value */
  256 	struct {
  257 		int32_t	_l;	/* lower 32 bits of disk address value */
  258 		int32_t	_u;	/* upper 32 bits of disk address value */
  259 	} _p;
  260 } lldaddr_t;
  261 #endif
  262 
  263 #ifdef _LONG_LONG_HTOL
  264 typedef union {
  265 	diskaddr_t	_f;	/* Full 64 bit disk address value */
  266 	struct {
  267 		int32_t	_u;	/* upper 32 bits of disk address value */
  268 		int32_t	_l;	/* lower 32 bits of disk address value */
  269 	} _p;
  270 } lldaddr_t;
  271 #endif
  272 
  273 typedef uint_t k_fltset_t;	/* kernel fault set type */
  274 
  275 /*
  276  * The following type is for various kinds of identifiers.  The
  277  * actual type must be the same for all since some system calls
  278  * (such as sigsend) take arguments that may be any of these
  279  * types.  The enumeration type idtype_t defined in sys/procset.h
  280  * is used to indicate what type of id is being specified --
  281  * a process id, process group id, session id, scheduling class id,
  282  * user id, group id, project id, or task id.
  283  */
  284 #if defined(_LP64) || defined(_I32LPx)
  285 typedef int		id_t;
  286 #else
  287 typedef	long		id_t;		/* (historical version) */
  288 #endif
  289 
  290 /*
  291  * Type useconds_t is an unsigned integral type capable of storing
  292  * values at least in the range of zero to 1,000,000.
  293  */
  294 typedef uint_t		useconds_t;	/* Time, in microseconds */
  295 
  296 #ifndef	_SUSECONDS_T
  297 #define	_SUSECONDS_T
  298 typedef long	suseconds_t;	/* signed # of microseconds */
  299 #endif	/* _SUSECONDS_T */
  300 
  301 /*
  302  * Typedefs for dev_t components.
  303  */
  304 #if defined(_LP64) || defined(_I32LPx)
  305 typedef uint_t	major_t;	/* major part of device number */
  306 typedef uint_t	minor_t;	/* minor part of device number */
  307 #else
  308 typedef ulong_t	major_t;	/* (historical version) */
  309 typedef ulong_t	minor_t;	/* (historical version) */
  310 #endif
  311 
  312 /*
  313  * The data type of a thread priority.
  314  */
  315 typedef short	pri_t;
  316 
  317 /*
  318  * For compatibility reasons the following typedefs (prefixed o_)
  319  * can't grow regardless of the EFT definition. Although,
  320  * applications should not explicitly use these typedefs
  321  * they may be included via a system header definition.
  322  * WARNING: These typedefs may be removed in a future
  323  * release.
  324  *		ex. the definitions in s5inode.h remain small
  325  *			to preserve compatibility in the S5
  326  *			file system type.
  327  */
  328 typedef	ushort_t o_mode_t;		/* old file attribute type */
  329 typedef short	o_dev_t;		/* old device type	*/
  330 typedef	ushort_t o_uid_t;		/* old UID type		*/
  331 typedef	o_uid_t	o_gid_t;		/* old GID type		*/
  332 typedef	short	o_nlink_t;		/* old file link type	*/
  333 typedef short	o_pid_t;		/* old process id type	*/
  334 typedef ushort_t o_ino_t;		/* old inode type	*/
  335 
  336 
  337 /*
  338  * POSIX and XOPEN Declarations
  339  */
  340 typedef	int	key_t;			/* IPC key type		*/
  341 #if defined(_LP64) || defined(_I32LPx)
  342 typedef	uint_t	mode_t;			/* file attribute type	*/
  343 #else
  344 typedef	ulong_t	mode_t;			/* (historical version) */
  345 #endif
  346 
  347 #ifndef	_UID_T
  348 #define	_UID_T
  349 #if defined(_LP64) || defined(_I32LPx)
  350 typedef	int	uid_t;			/* UID type		*/
  351 #else
  352 typedef	long	uid_t;			/* (historical version) */
  353 #endif
  354 #endif	/* _UID_T */
  355 
  356 typedef	uid_t	gid_t;			/* GID type		*/
  357 
  358 typedef id_t    taskid_t;
  359 typedef id_t    projid_t;
  360 
  361 /*
  362  * POSIX definitions are same as defined in thread.h and synch.h.
  363  * Any changes made to here should be reflected in corresponding
  364  * files as described in comments.
  365  */
  366 typedef	uint_t	pthread_t;	/* = thread_t in thread.h */
  367 typedef	uint_t	pthread_key_t;	/* = thread_key_t in thread.h */
  368 
  369 typedef	struct _pthread_mutex {		/* = mutex_t in synch.h */
  370 	struct {
  371 		uint16_t	__pthread_mutex_flag1;
  372 		uint8_t		__pthread_mutex_flag2;
  373 		uint8_t		__pthread_mutex_ceiling;
  374 		uint16_t 	__pthread_mutex_type;
  375 		uint16_t 	__pthread_mutex_magic;
  376 	} __pthread_mutex_flags;
  377 	union {
  378 		struct {
  379 			uint8_t	__pthread_mutex_pad[8];
  380 		} __pthread_mutex_lock64;
  381 		struct {
  382 			uint32_t __pthread_ownerpid;
  383 			uint32_t __pthread_lockword;
  384 		} __pthread_mutex_lock32;
  385 		upad64_t __pthread_mutex_owner64;
  386 	} __pthread_mutex_lock;
  387 	upad64_t __pthread_mutex_data;
  388 } pthread_mutex_t;
  389 
  390 typedef	struct _pthread_cond {		/* = cond_t in synch.h */
  391 	struct {
  392 		uint8_t		__pthread_cond_flag[4];
  393 		uint16_t 	__pthread_cond_type;
  394 		uint16_t 	__pthread_cond_magic;
  395 	} __pthread_cond_flags;
  396 	upad64_t __pthread_cond_data;
  397 } pthread_cond_t;
  398 
  399 /*
  400  * UNIX 98 Extension
  401  */
  402 typedef	struct _pthread_rwlock {	/* = rwlock_t in synch.h */
  403 	int32_t		__pthread_rwlock_readers;
  404 	uint16_t	__pthread_rwlock_type;
  405 	uint16_t	__pthread_rwlock_magic;
  406 	upad64_t	__pthread_rwlock_pad1[3];
  407 	upad64_t	__pthread_rwlock_pad2[2];
  408 	upad64_t	__pthread_rwlock_pad3[2];
  409 } pthread_rwlock_t;
  410 
  411 /*
  412  * attributes for threads, dynamically allocated by library
  413  */
  414 typedef struct _pthread_attr {
  415 	void	*__pthread_attrp;
  416 } pthread_attr_t;
  417 
  418 /*
  419  * attributes for mutex, dynamically allocated by library
  420  */
  421 typedef struct _pthread_mutexattr {
  422 	void	*__pthread_mutexattrp;
  423 } pthread_mutexattr_t;
  424 
  425 /*
  426  * attributes for cond, dynamically allocated by library
  427  */
  428 typedef struct _pthread_condattr {
  429 	void	*__pthread_condattrp;
  430 } pthread_condattr_t;
  431 
  432 /*
  433  * pthread_once
  434  */
  435 typedef	struct _once {
  436 	upad64_t	__pthread_once_pad[4];
  437 } pthread_once_t;
  438 
  439 /*
  440  * UNIX 98 Extensions
  441  * attributes for rwlock, dynamically allocated by library
  442  */
  443 typedef struct _pthread_rwlockattr {
  444 	void	*__pthread_rwlockattrp;
  445 } pthread_rwlockattr_t;
  446 
  447 typedef ulong_t	dev_t;			/* expanded device type */
  448 
  449 #if defined(_LP64) || defined(_I32LPx)
  450 typedef	uint_t nlink_t;			/* file link type	*/
  451 typedef int	pid_t;			/* process id type	*/
  452 #else
  453 typedef	ulong_t	nlink_t;		/* (historical version) */
  454 typedef	long	pid_t;			/* (historical version) */
  455 #endif
  456 
  457 #ifndef _SIZE_T
  458 #define	_SIZE_T
  459 #if defined(_LP64) || defined(_I32LPx)
  460 #if !defined(_GCC_SIZE_T)
  461 #define _GCC_SIZE_T
  462 typedef __SIZE_TYPE__ size_t;
  463 #endif
  464 		/* size of something in bytes */
  465 #else
  466 #if !defined(_GCC_SIZE_T)
  467 #define _GCC_SIZE_T
  468 typedef __SIZE_TYPE__ size_t;
  469 #endif
  470 		/* (historical version) */
  471 #endif
  472 #endif	/* _SIZE_T */
  473 
  474 #ifndef _SSIZE_T
  475 #define	_SSIZE_T
  476 #if defined(_LP64) || defined(_I32LPx)
  477 typedef long	ssize_t;	/* size of something in bytes or -1 */
  478 #else
  479 typedef int	ssize_t;	/* (historical version) */
  480 #endif
  481 #endif	/* _SSIZE_T */
  482 
  483 #ifndef _TIME_T
  484 #define	_TIME_T
  485 typedef	long		time_t;	/* time of day in seconds */
  486 #endif	/* _TIME_T */
  487 
  488 #ifndef _CLOCK_T
  489 #define	_CLOCK_T
  490 typedef	long		clock_t; /* relative time in a specified resolution */
  491 #endif	/* ifndef _CLOCK_T */
  492 
  493 #ifndef _CLOCKID_T
  494 #define	_CLOCKID_T
  495 typedef	int	clockid_t;	/* clock identifier type */
  496 #endif	/* ifndef _CLOCKID_T */
  497 
  498 #ifndef _TIMER_T
  499 #define	_TIMER_T
  500 typedef	int	timer_t;	/* timer identifier type */
  501 #endif	/* ifndef _TIMER_T */
  502 
  503 #if defined(__EXTENSIONS__) || \
  504 	(!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE))
  505 
  506 /* BEGIN CSTYLED */
  507 typedef	unsigned char	unchar;
  508 typedef	unsigned short	ushort;
  509 typedef	unsigned int	uint;
  510 typedef	unsigned long	ulong;
  511 /* END CSTYLED */
  512 
  513 #if defined(_KERNEL)
  514 
  515 #define	SHRT_MIN	(-32768)	/* min value of a "short int" */
  516 #define	SHRT_MAX	32767		/* max value of a "short int" */
  517 #define	USHRT_MAX	65535		/* max of "unsigned short int" */
  518 #define	INT_MIN		(-2147483647-1) /* min value of an "int" */
  519 #define	INT_MAX		2147483647	/* max value of an "int" */
  520 #define	UINT_MAX	4294967295U	/* max value of an "unsigned int" */
  521 #if defined(_LP64)
  522 #define	LONG_MIN	(-9223372036854775807L-1L)
  523 					/* min value of a "long int" */
  524 #define	LONG_MAX	9223372036854775807L
  525 					/* max value of a "long int" */
  526 #define	ULONG_MAX	18446744073709551615UL
  527 					/* max of "unsigned long int" */
  528 #else /* _ILP32 */
  529 #define	LONG_MIN	(-2147483647L-1L)
  530 					/* min value of a "long int" */
  531 #define	LONG_MAX	2147483647L	/* max value of a "long int" */
  532 #define	ULONG_MAX	4294967295UL	/* max of "unsigned long int" */
  533 #endif
  534 
  535 #endif	/* defined(_KERNEL) */
  536 
  537 #define	P_MYPID	((pid_t)0)
  538 
  539 /*
  540  * The following is the value of type id_t to use to indicate the
  541  * caller's current id.  See procset.h for the type idtype_t
  542  * which defines which kind of id is being specified.
  543  */
  544 #define	P_MYID	(-1)
  545 #define	NOPID (pid_t)(-1)
  546 
  547 #ifndef NODEV
  548 #define	NODEV	(dev_t)(-1l)
  549 #ifdef _SYSCALL32
  550 #define	NODEV32	(dev32_t)(-1)
  551 #endif	/* _SYSCALL32 */
  552 #endif	/* NODEV */
  553 
  554 /*
  555  * The following value of type pfn_t is used to indicate
  556  * invalid page frame number.
  557  */
  558 #define	PFN_INVALID	((pfn_t)-1)
  559 
  560 /* BEGIN CSTYLED */
  561 typedef unsigned char	u_char;
  562 typedef unsigned short	u_short;
  563 typedef unsigned int	u_int;
  564 typedef unsigned long	u_long;
  565 typedef struct _quad { int val[2]; } quad_t;	/* used by UFS */
  566 typedef quad_t		quad;			/* used by UFS */
  567 /* END CSTYLED */
  568 
  569 /*
  570  * Nested include for BSD/sockets source compatibility.
  571  * (The select macros used to be defined here).
  572  */
  573 #include <sys/select.h>
  574 
  575 #endif	/* defined(__EXTENSIONS__) || (!defined(_POSIX_C_SOURCE) && ... */
  576 
  577 /*
  578  * _VOID was defined to be either void or char but this is not
  579  * required because previous SunOS compilers have accepted the void
  580  * type. However, because many system header and source files use the
  581  * void keyword, the volatile keyword, and ANSI C function prototypes,
  582  * non-ANSI compilers cannot compile the system anyway. The _VOID macro
  583  * should therefore not be used and remains for source compatibility
  584  * only.
  585  */
  586 /* CSTYLED */
  587 #define	_VOID	void
  588 
  589 #ifdef	__cplusplus
  590 }
  591 #endif
  592 
  593 #endif	/* _SYS_TYPES_H */