(linenum→info "unix/slp.c:2238")

glibc/2.7/bits/types.h

    1: /* bits/types.h -- definitions of __*_t types underlying *_t types.
    2:    Copyright (C) 2002, 2003, 2004, 2005, 2007 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:  * Never include this file directly; use <sys/types.h> instead.
   22:  */
   23: 
   24: #ifndef _BITS_TYPES_H
   25: #define _BITS_TYPES_H   1
   26: 
   27: #include <features.h>
   28: #include <bits/wordsize.h>
   29: 
   30: /* Convenience types.  */
   31: typedef unsigned char __u_char;
   32: typedef unsigned short int __u_short;
   33: typedef unsigned int __u_int;
   34: typedef unsigned long int __u_long;
   35: 
   36: /* Fixed-size types, underlying types depend on word size and compiler.  */
   37: typedef signed char __int8_t;
   38: typedef unsigned char __uint8_t;
   39: typedef signed short int __int16_t;
   40: typedef unsigned short int __uint16_t;
   41: typedef signed int __int32_t;
   42: typedef unsigned int __uint32_t;
   43: #if __WORDSIZE == 64
   44: typedef signed long int __int64_t;
   45: typedef unsigned long int __uint64_t;
   46: #elif defined __GLIBC_HAVE_LONG_LONG
   47: __extension__ typedef signed long long int __int64_t;
   48: __extension__ typedef unsigned long long int __uint64_t;
   49: #endif
   50: 
   51: /* quad_t is also 64 bits.  */
   52: #if __WORDSIZE == 64
   53: typedef long int __quad_t;
   54: typedef unsigned long int __u_quad_t;
   55: #elif defined __GLIBC_HAVE_LONG_LONG
   56: __extension__ typedef long long int __quad_t;
   57: __extension__ typedef unsigned long long int __u_quad_t;
   58: #else
   59: typedef struct
   60: {
   61:   long __val[2];
   62: } __quad_t;
   63: typedef struct
   64: {
   65:   __u_long __val[2];
   66: } __u_quad_t;
   67: #endif
   68: 
   69: 
   70: /* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
   71:    macros for each of the OS types we define below.  The definitions
   72:    of those macros must use the following macros for underlying types.
   73:    We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
   74:    variants of each of the following integer types on this machine.
   75: 
   76:         16             -- "natural" 16-bit type (always short)
   77:         32             -- "natural" 32-bit type (always int)
   78:         64             -- "natural" 64-bit type (long or long long)
   79:         LONG32         -- 32-bit type, traditionally long
   80:         QUAD           -- 64-bit type, always long long
   81:         WORD           -- natural type of __WORDSIZE bits (int or long)
   82:         LONGWORD       -- type of __WORDSIZE bits, traditionally long
   83: 
   84:    We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
   85:    conventional uses of `long' or `long long' type modifiers match the
   86:    types we define, even when a less-adorned type would be the same size.
   87:    This matters for (somewhat) portably writing printf/scanf formats for
   88:    these types, where using the appropriate l or ll format modifiers can
   89:    make the typedefs and the formats match up across all GNU platforms.  If
   90:    we used `long' when it's 64 bits where `long long' is expected, then the
   91:    compiler would warn about the formats not matching the argument types,
   92:    and the programmer changing them to shut up the compiler would break the
   93:    program's portability.
   94: 
   95:    Here we assume what is presently the case in all the GCC configurations
   96:    we support: long long is always 64 bits, long is always word/address size,
   97:    and int is always 32 bits.  */
   98: 
   99: #define __S16_TYPE              short int
  100: #define __U16_TYPE              unsigned short int
  101: #define __S32_TYPE              int
  102: #define __U32_TYPE              unsigned int
  103: #define __SLONGWORD_TYPE        long int
  104: #define __ULONGWORD_TYPE        unsigned long int
  105: #if __WORDSIZE == 32
  106: # define __SQUAD_TYPE           __quad_t
  107: # define __UQUAD_TYPE           __u_quad_t
  108: # define __SWORD_TYPE           int
  109: # define __UWORD_TYPE           unsigned int
  110: # define __SLONG32_TYPE         long int
  111: # define __ULONG32_TYPE         unsigned long int
  112: # define __S64_TYPE             __quad_t
  113: # define __U64_TYPE             __u_quad_t
  114: /* We want __extension__ before typedef's that use nonstandard base types
  115:    such as `long long' in C89 mode.  */
  116: # define __STD_TYPE             __extension__ typedef
  117: #elif __WORDSIZE == 64
  118: # define __SQUAD_TYPE           long int
  119: # define __UQUAD_TYPE           unsigned long int
  120: # define __SWORD_TYPE           long int
  121: # define __UWORD_TYPE           unsigned long int
  122: # define __SLONG32_TYPE         int
  123: # define __ULONG32_TYPE         unsigned int
  124: # define __S64_TYPE             long int
  125: # define __U64_TYPE             unsigned long int
  126: /* No need to mark the typedef with __extension__.   */
  127: # define __STD_TYPE             typedef
  128: #else
  129: # error
  130: #endif
  131: #include <bits/typesizes.h>     /* Defines __*_T_TYPE macros.  */
  132: 
  133: 
  134: __STD_TYPE __DEV_T_TYPE __dev_t;        /* Type of device numbers.  */
  135: __STD_TYPE __UID_T_TYPE __uid_t;        /* Type of user identifications.  */
  136: __STD_TYPE __GID_T_TYPE __gid_t;        /* Type of group identifications.  */
  137: __STD_TYPE __INO_T_TYPE __ino_t;        /* Type of file serial numbers.  */
  138: __STD_TYPE __INO64_T_TYPE __ino64_t;    /* Type of file serial numbers (LFS).*/
  139: __STD_TYPE __MODE_T_TYPE __mode_t;      /* Type of file attribute bitmasks.  */
  140: __STD_TYPE __NLINK_T_TYPE __nlink_t;    /* Type of file link counts.  */
  141: __STD_TYPE __OFF_T_TYPE __off_t;        /* Type of file sizes and offsets.  */
  142: __STD_TYPE __OFF64_T_TYPE __off64_t;    /* Type of file sizes and offsets (LFS).  */
  143: __STD_TYPE __PID_T_TYPE __pid_t;        /* Type of process identifications.  */
  144: __STD_TYPE __FSID_T_TYPE __fsid_t;      /* Type of file system IDs.  */
  145: __STD_TYPE __CLOCK_T_TYPE __clock_t;    /* Type of CPU usage counts.  */
  146: __STD_TYPE __RLIM_T_TYPE __rlim_t;      /* Type for resource measurement.  */
  147: __STD_TYPE __RLIM64_T_TYPE __rlim64_t;  /* Type for resource measurement (LFS).  */
  148: __STD_TYPE __ID_T_TYPE __id_t;          /* General type for IDs.  */
  149: __STD_TYPE __TIME_T_TYPE __time_t;      /* Seconds since the Epoch.  */
  150: __STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds.  */
  151: __STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds.  */
  152: 
  153: __STD_TYPE __DADDR_T_TYPE __daddr_t;    /* The type of a disk address.  */
  154: __STD_TYPE __SWBLK_T_TYPE __swblk_t;    /* Type of a swap block maybe?  */
  155: __STD_TYPE __KEY_T_TYPE __key_t;        /* Type of an IPC key.  */
  156: 
  157: /* Clock ID used in clock and timer functions.  */
  158: __STD_TYPE __CLOCKID_T_TYPE __clockid_t;
  159: 
  160: /* Timer ID returned by `timer_create'.  */
  161: __STD_TYPE __TIMER_T_TYPE __timer_t;
  162: 
  163: /* Type to represent block size.  */
  164: __STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
  165: 
  166: /* Types from the Large File Support interface.  */
  167: 
  168: /* Type to count number of disk blocks.  */
  169: __STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
  170: __STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
  171: 
  172: /* Type to count file system blocks.  */
  173: __STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
  174: __STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
  175: 
  176: /* Type to count file system nodes.  */
  177: __STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
  178: __STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
  179: 
  180: __STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error.  */
  181: 
  182: /* These few don't really vary by system, they always correspond
  183:    to one of the other defined types.  */
  184: typedef __off64_t __loff_t;     /* Type of file sizes and offsets (LFS).  */
  185: typedef __quad_t *__qaddr_t;
  186: typedef char *__caddr_t;
  187: 
  188: /* Duplicates info from stdint.h but this is used in unistd.h.  */
  189: __STD_TYPE __SWORD_TYPE __intptr_t;
  190: 
  191: /* Duplicate info from sys/socket.h.  */
  192: __STD_TYPE __U32_TYPE __socklen_t;
  193: 
  194: 
  195: #undef __STD_TYPE
  196: 
  197: #endif /* bits/types.h */
Syntax (Markdown)