1/* Copyright (C) 1991-2017 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, see
16 <http://www.gnu.org/licenses/>. */
17
18/*
19 * POSIX Standard: 2.6 Primitive System Data Types <sys/types.h>
20 */
21
22#ifndef _SYS_TYPES_H
23#define _SYS_TYPES_H 1
24
25#include <features.h>
26
27__BEGIN_DECLS
28
29#include <bits/types.h>
30
31#ifdef __USE_MISC
32# ifndef __u_char_defined
33typedef __u_char u_char;
34typedef __u_short u_short;
35typedef __u_int u_int;
36typedef __u_long u_long;
37typedef __quad_t quad_t;
38typedef __u_quad_t u_quad_t;
39typedef __fsid_t fsid_t;
40# define __u_char_defined
41# endif
42#endif
43
44typedef __loff_t loff_t;
45
46#ifndef __ino_t_defined
47# ifndef __USE_FILE_OFFSET64
48typedef __ino_t ino_t;
49# else
50typedef __ino64_t ino_t;
51# endif
52# define __ino_t_defined
53#endif
54#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
55typedef __ino64_t ino64_t;
56# define __ino64_t_defined
57#endif
58
59#ifndef __dev_t_defined
60typedef __dev_t dev_t;
61# define __dev_t_defined
62#endif
63
64#ifndef __gid_t_defined
65typedef __gid_t gid_t;
66# define __gid_t_defined
67#endif
68
69#ifndef __mode_t_defined
70typedef __mode_t mode_t;
71# define __mode_t_defined
72#endif
73
74#ifndef __nlink_t_defined
75typedef __nlink_t nlink_t;
76# define __nlink_t_defined
77#endif
78
79#ifndef __uid_t_defined
80typedef __uid_t uid_t;
81# define __uid_t_defined
82#endif
83
84#ifndef __off_t_defined
85# ifndef __USE_FILE_OFFSET64
86typedef __off_t off_t;
87# else
88typedef __off64_t off_t;
89# endif
90# define __off_t_defined
91#endif
92#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
93typedef __off64_t off64_t;
94# define __off64_t_defined
95#endif
96
97#ifndef __pid_t_defined
98typedef __pid_t pid_t;
99# define __pid_t_defined
100#endif
101
102#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \
103 && !defined __id_t_defined
104typedef __id_t id_t;
105# define __id_t_defined
106#endif
107
108#ifndef __ssize_t_defined
109typedef __ssize_t ssize_t;
110# define __ssize_t_defined
111#endif
112
113#ifdef __USE_MISC
114# ifndef __daddr_t_defined
115typedef __daddr_t daddr_t;
116typedef __caddr_t caddr_t;
117# define __daddr_t_defined
118# endif
119#endif
120
121#if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined
122typedef __key_t key_t;
123# define __key_t_defined
124#endif
125
126#if defined __USE_XOPEN || defined __USE_XOPEN2K8
127# include <bits/types/clock_t.h>
128#endif
129#include <bits/types/clockid_t.h>
130#include <bits/types/time_t.h>
131#include <bits/types/timer_t.h>
132
133#ifdef __USE_XOPEN
134# ifndef __useconds_t_defined
135typedef __useconds_t useconds_t;
136# define __useconds_t_defined
137# endif
138# ifndef __suseconds_t_defined
139typedef __suseconds_t suseconds_t;
140# define __suseconds_t_defined
141# endif
142#endif
143
144#define __need_size_t
145#include <stddef.h>
146
147#ifdef __USE_MISC
148/* Old compatibility names for C types. */
149typedef unsigned long int ulong;
150typedef unsigned short int ushort;
151typedef unsigned int uint;
152#endif
153
154/* These size-specific names are used by some of the inet code. */
155
156#if !__GNUC_PREREQ (2, 7)
157
158/* These types are defined by the ISO C99 header <inttypes.h>. */
159# ifndef __int8_t_defined
160# define __int8_t_defined
161typedef char int8_t;
162typedef short int int16_t;
163typedef int int32_t;
164# if __WORDSIZE == 64
165typedef long int int64_t;
166# else
167__extension__ typedef long long int int64_t;
168# endif
169# endif
170
171/* But these were defined by ISO C without the first `_'. */
172typedef unsigned char u_int8_t;
173typedef unsigned short int u_int16_t;
174typedef unsigned int u_int32_t;
175# if __WORDSIZE == 64
176typedef unsigned long int u_int64_t;
177# else
178__extension__ typedef unsigned long long int u_int64_t;
179# endif
180
181typedef int register_t;
182
183#else
184
185/* For GCC 2.7 and later, we can use specific type-size attributes. */
186# define __intN_t(N, MODE) \
187 typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
188# define __u_intN_t(N, MODE) \
189 typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
190
191# ifndef __int8_t_defined
192# define __int8_t_defined
193__intN_t (8, __QI__);
194__intN_t (16, __HI__);
195__intN_t (32, __SI__);
196__intN_t (64, __DI__);
197# endif
198
199__u_intN_t (8, __QI__);
200__u_intN_t (16, __HI__);
201__u_intN_t (32, __SI__);
202__u_intN_t (64, __DI__);
203
204typedef int register_t __attribute__ ((__mode__ (__word__)));
205
206
207/* Some code from BIND tests this macro to see if the types above are
208 defined. */
209#endif
210#define __BIT_TYPES_DEFINED__ 1
211
212
213#ifdef __USE_MISC
214/* In BSD <sys/types.h> is expected to define BYTE_ORDER. */
215# include <endian.h>
216
217/* It also defines `fd_set' and the FD_* macros for `select'. */
218# include <sys/select.h>
219
220/* BSD defines `major', `minor', and `makedev' in this header.
221 However, these symbols are likely to collide with user code, so we are
222 going to stop defining them here in an upcoming release. Code that needs
223 these macros should include <sys/sysmacros.h> directly. Code that does
224 not need these macros should #undef them after including this header. */
225# define __SYSMACROS_DEPRECATED_INCLUSION
226# include <sys/sysmacros.h>
227# undef __SYSMACROS_DEPRECATED_INCLUSION
228#endif /* Use misc. */
229
230
231#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \
232 && !defined __blksize_t_defined
233typedef __blksize_t blksize_t;
234# define __blksize_t_defined
235#endif
236
237/* Types from the Large File Support interface. */
238#ifndef __USE_FILE_OFFSET64
239# ifndef __blkcnt_t_defined
240typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */
241# define __blkcnt_t_defined
242# endif
243# ifndef __fsblkcnt_t_defined
244typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */
245# define __fsblkcnt_t_defined
246# endif
247# ifndef __fsfilcnt_t_defined
248typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */
249# define __fsfilcnt_t_defined
250# endif
251#else
252# ifndef __blkcnt_t_defined
253typedef __blkcnt64_t blkcnt_t; /* Type to count number of disk blocks. */
254# define __blkcnt_t_defined
255# endif
256# ifndef __fsblkcnt_t_defined
257typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */
258# define __fsblkcnt_t_defined
259# endif
260# ifndef __fsfilcnt_t_defined
261typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */
262# define __fsfilcnt_t_defined
263# endif
264#endif
265
266#ifdef __USE_LARGEFILE64
267typedef __blkcnt64_t blkcnt64_t; /* Type to count number of disk blocks. */
268typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks. */
269typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes. */
270#endif
271
272
273/* Now add the thread types. */
274#if defined __USE_POSIX199506 || defined __USE_UNIX98
275# include <bits/pthreadtypes.h>
276#endif
277
278__END_DECLS
279
280#endif /* sys/types.h */
281