1/* Copyright (C) 1991,1992,1994,1995,1996,1997,1998,1999,2000,2001,2002 2 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, write to the Free 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 19 20/* 21 * POSIX Standard: 2.6 Primitive System Data Types <sys/types.h> 22 */ 23 24#ifndef _SYS_TYPES_H 25#define _SYS_TYPES_H 1 26 27#include <features.h> 28 29__BEGIN_DECLS 30 31#include <bits/types.h> 32 33#ifdef __USE_BSD 34# ifndef __u_char_defined 35typedef __u_char u_char; 36typedef __u_short u_short; 37typedef __u_int u_int; 38typedef __u_long u_long; 39typedef __quad_t quad_t; 40typedef __u_quad_t u_quad_t; 41typedef __fsid_t fsid_t; 42# define __u_char_defined 43# endif 44#endif 45 46typedef __loff_t loff_t; 47 48#ifndef __ino_t_defined 49# ifndef __USE_FILE_OFFSET64 50typedef __ino_t ino_t; 51# else 52typedef __ino64_t ino_t; 53# endif 54# define __ino_t_defined 55#endif 56#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined 57typedef __ino64_t ino64_t; 58# define __ino64_t_defined 59#endif 60 61#ifndef __dev_t_defined 62typedef __dev_t dev_t; 63# define __dev_t_defined 64#endif 65 66#ifndef __gid_t_defined 67typedef __gid_t gid_t; 68# define __gid_t_defined 69#endif 70 71#ifndef __mode_t_defined 72typedef __mode_t mode_t; 73# define __mode_t_defined 74#endif 75 76#ifndef __nlink_t_defined 77typedef __nlink_t nlink_t; 78# define __nlink_t_defined 79#endif 80 81#ifndef __uid_t_defined 82typedef __uid_t uid_t; 83# define __uid_t_defined 84#endif 85 86#ifndef __off_t_defined 87# ifndef __USE_FILE_OFFSET64 88typedef __off_t off_t; 89# else 90typedef __off64_t off_t; 91# endif 92# define __off_t_defined 93#endif 94#if defined __USE_LARGEFILE64 && !defined __off64_t_defined 95typedef __off64_t off64_t; 96# define __off64_t_defined 97#endif 98 99#ifndef __pid_t_defined 100typedef __pid_t pid_t; 101# define __pid_t_defined 102#endif 103 104#if (defined __USE_SVID || defined __USE_XOPEN) && !defined __id_t_defined 105typedef __id_t id_t; 106# define __id_t_defined 107#endif 108 109#ifndef __ssize_t_defined 110typedef __ssize_t ssize_t; 111# define __ssize_t_defined 112#endif 113 114#ifdef __USE_BSD 115# ifndef __daddr_t_defined 116typedef __daddr_t daddr_t; 117typedef __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 123typedef __key_t key_t; 124# define __key_t_defined 125#endif 126 127#ifdef __USE_XOPEN 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 137typedef __useconds_t useconds_t; 138# define __useconds_t_defined 139# endif 140# ifndef __suseconds_t_defined 141typedef __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. */ 151typedef unsigned long int ulong; 152typedef unsigned short int ushort; 153typedef 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 163typedef char int8_t; 164typedef short int int16_t; 165typedef int int32_t; 166# if __WORDSIZE == 64 167typedef long int int64_t; 168# elif defined __GNUC__ || defined __ICC 169__extension__ typedef long long int int64_t; 170# endif 171# endif 172 173/* But these were defined by ISO C without the first `_'. */ 174typedef unsigned char u_int8_t; 175typedef unsigned short int u_int16_t; 176typedef unsigned int u_int32_t; 177# if __WORDSIZE == 64 178typedef unsigned long int u_int64_t; 179# elif defined __GNUC__ || defined __ICC 180__extension__ typedef unsigned long long int u_int64_t; 181# endif 182 183typedef 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 206typedef 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 __blksize_t_defined 228typedef __blksize_t blksize_t; 229# define __blksize_t_defined 230#endif 231 232/* Types from the Large File Support interface. */ 233#ifndef __USE_FILE_OFFSET64 234# ifndef __blkcnt_t_defined 235typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */ 236# define __blkcnt_t_defined 237# endif 238# ifndef __fsblkcnt_t_defined 239typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */ 240# define __fsblkcnt_t_defined 241# endif 242# ifndef __fsfilcnt_t_defined 243typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */ 244# define __fsfilcnt_t_defined 245# endif 246#else 247# ifndef __blkcnt_t_defined 248typedef __blkcnt64_t blkcnt_t; /* Type to count number of disk blocks. */ 249# define __blkcnt_t_defined 250# endif 251# ifndef __fsblkcnt_t_defined 252typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */ 253# define __fsblkcnt_t_defined 254# endif 255# ifndef __fsfilcnt_t_defined 256typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */ 257# define __fsfilcnt_t_defined 258# endif 259#endif 260 261#ifdef __USE_LARGEFILE64 262typedef __blkcnt64_t blkcnt64_t; /* Type to count number of disk blocks. */ 263typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks. */ 264typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes. */ 265#endif 266 267 268/* Now add the thread types. */ 269#if (defined __USE_POSIX199506 || defined __USE_UNIX98) && defined __UCLIBC_HAS_THREADS__ 270# include <bits/pthreadtypes.h> 271#endif 272 273__END_DECLS 274 275#endif /* sys/types.h */ 276