1    	/* Copyright (C) 1991,1992,1994-2002,2006,2010 Free Software Foundation, Inc.
2    	   This file is part of the GNU C Library.
3    	
4    	   The GNU C Library is free software; you can redistribute it and/or
5    	   modify it under the terms of the GNU Lesser General Public
6    	   License as published by the Free Software Foundation; either
7    	   version 2.1 of the License, or (at your option) any later version.
8    	
9    	   The GNU C Library is distributed in the hope that it will be useful,
10   	   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   	   Lesser General Public License for more details.
13   	
14   	   You should have received a copy of the GNU Lesser General Public
15   	   License along with the GNU C Library; if not, write to the Free
16   	   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17   	   02111-1307 USA.  */
18   	
19   	/*
20   	 *	POSIX Standard: 2.6 Primitive System Data Types	<sys/types.h>
21   	 */
22   	
23   	#ifndef	_SYS_TYPES_H
24   	#define	_SYS_TYPES_H	1
25   	
26   	#include <features.h>
27   	
28   	__BEGIN_DECLS
29   	
30   	#include <bits/types.h>
31   	
32   	#ifdef	__USE_BSD
33   	# ifndef __u_char_defined
34   	typedef __u_char u_char;
35   	typedef __u_short u_short;
36   	typedef __u_int u_int;
37   	typedef __u_long u_long;
38   	typedef __quad_t quad_t;
39   	typedef __u_quad_t u_quad_t;
40   	typedef __fsid_t fsid_t;
41   	#  define __u_char_defined
42   	# endif
43   	#endif
44   	
45   	typedef __loff_t loff_t;
46   	
47   	#ifndef __ino_t_defined
48   	# ifndef __USE_FILE_OFFSET64
49   	typedef __ino_t ino_t;
50   	# else
51   	typedef __ino64_t ino_t;
52   	# endif
53   	# define __ino_t_defined
54   	#endif
55   	#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
56   	typedef __ino64_t ino64_t;
57   	# define __ino64_t_defined
58   	#endif
59   	
60   	#ifndef __dev_t_defined
61   	typedef __dev_t dev_t;
62   	# define __dev_t_defined
63   	#endif
64   	
65   	#ifndef __gid_t_defined
66   	typedef __gid_t gid_t;
67   	# define __gid_t_defined
68   	#endif
69   	
70   	#ifndef __mode_t_defined
71   	typedef __mode_t mode_t;
72   	# define __mode_t_defined
73   	#endif
74   	
75   	#ifndef __nlink_t_defined
76   	typedef __nlink_t nlink_t;
77   	# define __nlink_t_defined
78   	#endif
79   	
80   	#ifndef __uid_t_defined
81   	typedef __uid_t uid_t;
82   	# define __uid_t_defined
83   	#endif
84   	
85   	#ifndef __off_t_defined
86   	# ifndef __USE_FILE_OFFSET64
87   	typedef __off_t off_t;
88   	# else
89   	typedef __off64_t off_t;
90   	# endif
91   	# define __off_t_defined
92   	#endif
93   	#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
94   	typedef __off64_t off64_t;
95   	# define __off64_t_defined
96   	#endif
97   	
98   	#ifndef __pid_t_defined
99   	typedef __pid_t pid_t;
100  	# define __pid_t_defined
101  	#endif
102  	
103  	#if (defined __USE_SVID || defined __USE_XOPEN || defined __USE_XOPEN2K8) \
104  	    && !defined __id_t_defined
105  	typedef __id_t id_t;
106  	# define __id_t_defined
107  	#endif
108  	
109  	#ifndef __ssize_t_defined
110  	typedef __ssize_t ssize_t;
111  	# define __ssize_t_defined
112  	#endif
113  	
114  	#ifdef	__USE_BSD
115  	# ifndef __daddr_t_defined
116  	typedef __daddr_t daddr_t;
117  	typedef __caddr_t caddr_t;
118  	#  define __daddr_t_defined
119  	# endif
120  	#endif
121  	
122  	#if (defined __USE_SVID || defined __USE_XOPEN) && !defined __key_t_defined
123  	typedef __key_t key_t;
124  	# define __key_t_defined
125  	#endif
126  	
127  	#if defined __USE_XOPEN || defined __USE_XOPEN2K8
128  	# define __need_clock_t
129  	#endif
130  	#define	__need_time_t
131  	#define __need_timer_t
132  	#define __need_clockid_t
133  	#include <time.h>
134  	
135  	#ifdef __USE_XOPEN
136  	# ifndef __useconds_t_defined
137  	typedef __useconds_t useconds_t;
138  	#  define __useconds_t_defined
139  	# endif
140  	# ifndef __suseconds_t_defined
141  	typedef __suseconds_t suseconds_t;
142  	#  define __suseconds_t_defined
143  	# endif
144  	#endif
145  	
146  	#define	__need_size_t
147  	#include <stddef.h>
148  	
149  	#ifdef __USE_MISC
150  	/* Old compatibility names for C types.  */
151  	typedef unsigned long int ulong;
152  	typedef unsigned short int ushort;
153  	typedef unsigned int uint;
154  	#endif
155  	
156  	/* These size-specific names are used by some of the inet code.  */
157  	
158  	#if !__GNUC_PREREQ (2, 7)
159  	
160  	/* These types are defined by the ISO C99 header <inttypes.h>. */
161  	# ifndef __int8_t_defined
162  	#  define __int8_t_defined
163  	typedef	char int8_t;
164  	typedef	short int int16_t;
165  	typedef	int int32_t;
166  	#  if __WORDSIZE == 64
167  	typedef long int int64_t;
168  	#  elif __GLIBC_HAVE_LONG_LONG
169  	__extension__ typedef long long int int64_t;
170  	#  endif
171  	# endif
172  	
173  	/* But these were defined by ISO C without the first `_'.  */
174  	typedef	unsigned char u_int8_t;
175  	typedef	unsigned short int u_int16_t;
176  	typedef	unsigned int u_int32_t;
177  	# if __WORDSIZE == 64
178  	typedef unsigned long int u_int64_t;
179  	# elif __GLIBC_HAVE_LONG_LONG
180  	__extension__ typedef unsigned long long int u_int64_t;
181  	# endif
182  	
183  	typedef int register_t;
184  	
185  	#else
186  	
187  	/* For GCC 2.7 and later, we can use specific type-size attributes.  */
188  	# define __intN_t(N, MODE) \
189  	  typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
190  	# define __u_intN_t(N, MODE) \
191  	  typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
192  	
193  	# ifndef __int8_t_defined
194  	#  define __int8_t_defined
195  	__intN_t (8, __QI__);
196  	__intN_t (16, __HI__);
197  	__intN_t (32, __SI__);
198  	__intN_t (64, __DI__);
199  	# endif
200  	
201  	__u_intN_t (8, __QI__);
202  	__u_intN_t (16, __HI__);
203  	__u_intN_t (32, __SI__);
204  	__u_intN_t (64, __DI__);
205  	
206  	typedef int register_t __attribute__ ((__mode__ (__word__)));
207  	
208  	
209  	/* Some code from BIND tests this macro to see if the types above are
210  	   defined.  */
211  	#endif
212  	#define __BIT_TYPES_DEFINED__	1
213  	
214  	
215  	#ifdef	__USE_BSD
216  	/* In BSD <sys/types.h> is expected to define BYTE_ORDER.  */
217  	# include <endian.h>
218  	
219  	/* It also defines `fd_set' and the FD_* macros for `select'.  */
220  	# include <sys/select.h>
221  	
222  	/* BSD defines these symbols, so we follow.  */
223  	# include <sys/sysmacros.h>
224  	#endif /* Use BSD.  */
225  	
226  	
227  	#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \
228  	    && !defined __blksize_t_defined
229  	typedef __blksize_t blksize_t;
230  	# define __blksize_t_defined
231  	#endif
232  	
233  	/* Types from the Large File Support interface.  */
234  	#ifndef __USE_FILE_OFFSET64
235  	# ifndef __blkcnt_t_defined
236  	typedef __blkcnt_t blkcnt_t;	 /* Type to count number of disk blocks.  */
237  	#  define __blkcnt_t_defined
238  	# endif
239  	# ifndef __fsblkcnt_t_defined
240  	typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
241  	#  define __fsblkcnt_t_defined
242  	# endif
243  	# ifndef __fsfilcnt_t_defined
244  	typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
245  	#  define __fsfilcnt_t_defined
246  	# endif
247  	#else
248  	# ifndef __blkcnt_t_defined
249  	typedef __blkcnt64_t blkcnt_t;	   /* Type to count number of disk blocks.  */
250  	#  define __blkcnt_t_defined
251  	# endif
252  	# ifndef __fsblkcnt_t_defined
253  	typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
254  	#  define __fsblkcnt_t_defined
255  	# endif
256  	# ifndef __fsfilcnt_t_defined
257  	typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
258  	#  define __fsfilcnt_t_defined
259  	# endif
260  	#endif
261  	
262  	#ifdef __USE_LARGEFILE64
263  	typedef __blkcnt64_t blkcnt64_t;     /* Type to count number of disk blocks. */
264  	typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks.  */
265  	typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes.  */
266  	#endif
267  	
268  	
269  	/* Now add the thread types.  */
270  	#if defined __USE_POSIX199506 || defined __USE_UNIX98
271  	# include <bits/pthreadtypes.h>
272  	#endif
273  	
274  	__END_DECLS
275  	
276  	#endif /* sys/types.h */
277