1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
|
/* @(#)utypes.h 1.11 03/06/15 Copyright 1997 J. Schilling */
/*
* Definitions for some user defined types
*
* Copyright (c) 1997 J. Schilling
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; see the file COPYING. If not, write to the Free Software
* Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _UTYPES_H
#define _UTYPES_H
#ifndef _MCONFIG_H
#include <mconfig.h>
#endif
/*
* Include limits.h for CHAR_BIT
*/
#ifdef HAVE_LIMITS_H
#ifndef _INCL_LIMITS_H
#include <limits.h>
#define _INCL_LIMITS_H
#endif
#endif
#ifndef CHAR_BIT
#define CHAR_BIT 8
#endif
/*
* These macros may not work on all platforms but as we depend
* on two's complement in many places, they do not reduce portability.
*/
#define TYPE_ISSIGNED(t) (((t)-1) < ((t)0))
#define TYPE_MSBVAL(t) ((t)(~((t)0) << (sizeof (t)*CHAR_BIT - 1)))
#define TYPE_MINVAL(t) (TYPE_ISSIGNED(t) \
? TYPE_MSBVAL(t) \
: ((t)0))
#define TYPE_MAXVAL(t) ((t)(~((t)0) - TYPE_MINVAL(t)))
/*
* Let us include system defined types too.
*/
#ifndef _INCL_SYS_TYPES_H
#include <sys/types.h>
#define _INCL_SYS_TYPES_H
#endif
#ifdef __CHAR_UNSIGNED__ /* GNU GCC define (dynamic) */
#ifndef CHAR_IS_UNSIGNED
#define CHAR_IS_UNSIGNED /* Sing Schily define (static) */
#endif
#endif
/*
* Several unsigned cardinal types
*/
typedef unsigned long Ulong;
typedef unsigned int Uint;
typedef unsigned short Ushort;
typedef unsigned char Uchar;
/*
* Added these cause Linux distro's using kernel 2.6.x seems
* to want them.
*/
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
#if defined(__GNUC__) /* this is defined gcc-3.x */
typedef unsigned long long u64;
#endif
/*
* Dodge the __attribute_const__ out of sneaky kernel includes.
* cdrtools is a userland program, so no kernel attribute's
*/
#ifndef __attribute_const__
# define __attribute_const__ /* unimplemented */
#endif
/*
* This is a definition for a compiler dependant 64 bit type.
* It currently is silently a long if the compiler does not
* support it. Check if this is the right way.
*/
#ifndef NO_LONGLONG
# if defined(HAVE_LONGLONG)
# define USE_LONGLONG
# endif
#endif
#ifdef USE_LONGLONG
typedef long long Llong;
typedef unsigned long long Ullong;
#define SIZEOF_LLONG SIZEOF_LONG_LONG
#define SIZEOF_ULLONG SIZEOF_UNSIGNED_LONG_LONG
#else
typedef long Llong;
typedef unsigned long Ullong;
#define SIZEOF_LLONG SIZEOF_LONG
#define SIZEOF_ULLONG SIZEOF_UNSIGNED_LONG
#endif
/*
* The IBM AIX C-compiler seems to be the only compiler on the world
* which does not allow to use unsigned char bit fields as a hint
* for packed bit fields. Define a pesical type to avoid warnings.
* The packed attribute is honored wit unsigned int in this case too.
*/
#if defined(_AIX) && !defined(__GNUC__)
typedef unsigned int Ucbit;
#else
typedef unsigned char Ucbit;
#endif
/*
* Start inttypes.h emulation.
*
* Thanks to Solaris 2.4 and even recent 1999 Linux versions, we
* cannot use the official UNIX-98 names here. Old Solaris versions
* define parts of the types in some exotic include files.
* Linux even defines incompatible types in <sys/types.h>.
*/
#ifdef HAVE_INTTYPES_H
# ifndef _INCL_INTTYPES_H
# include <inttypes.h>
# define _INCL_INTTYPES_H
# endif
# define HAVE_INT64_T
# define HAVE_UINT64_T
#define Int8_t int8_t
#define Int16_t int16_t
#define Int32_t int32_t
#define Int64_t int64_t
#define Intmax_t intmax_t
#define UInt8_t uint8_t
#define UInt16_t uint16_t
#define UInt32_t uint32_t
#define UInt64_t uint64_t
#define UIntmax_t uintmax_t
#define Intptr_t intptr_t
#define UIntptr_t uintptr_t
#else /* !HAVE_INTTYPES_H */
#if SIZEOF_CHAR != 1 || SIZEOF_UNSIGNED_CHAR != 1
/*
* #error will not work for all compilers (e.g. sunos4)
* The following line will abort compilation on all compilers
* if the above is true. And that's what we want.
*/
error Sizeof char is not equal 1
#endif
#if defined(__STDC__) || defined(CHAR_IS_UNSIGNED)
typedef signed char Int8_t;
#else
typedef char Int8_t;
#endif
#if SIZEOF_SHORT_INT == 2
typedef short Int16_t;
#else
error No int16_t found
#endif
#if SIZEOF_INT == 4
typedef int Int32_t;
#else
error No int32_t found
#endif
#if SIZEOF_LONG_INT == 8
typedef long Int64_t;
# define HAVE_INT64_T
#else
#if SIZEOF_LONG_LONG == 8
typedef long long Int64_t;
# define HAVE_INT64_T
#else
/* error No int64_t found*/
#endif
#endif
#if SIZEOF_CHAR_P == SIZEOF_INT
typedef int Intptr_t;
#else
#if SIZEOF_CHAR_P == SIZEOF_LONG_INT
typedef long Intptr_t;
#else
error No intptr_t found
#endif
#endif
typedef unsigned char UInt8_t;
#if SIZEOF_UNSIGNED_SHORT_INT == 2
typedef unsigned short UInt16_t;
#else
error No uint16_t found
#endif
#if SIZEOF_UNSIGNED_INT == 4
typedef unsigned int UInt32_t;
#else
error No int32_t found
#endif
#if SIZEOF_UNSIGNED_LONG_INT == 8
typedef unsigned long UInt64_t;
# define HAVE_UINT64_T
#else
#if SIZEOF_UNSIGNED_LONG_LONG == 8
typedef unsigned long long UInt64_t;
# define HAVE_UINT64_T
#else
/* error No uint64_t found*/
#endif
#endif
#define Intmax_t Llong
#define UIntmax_t Ullong
#if SIZEOF_CHAR_P == SIZEOF_UNSIGNED_INT
typedef unsigned int UIntptr_t;
#else
#if SIZEOF_CHAR_P == SIZEOF_UNSIGNED_LONG_INT
typedef unsigned long UIntptr_t;
#else
error No uintptr_t found
#endif
#endif
#endif /* HAVE_INTTYPES_H */
#ifndef CHAR_MIN
#define CHAR_MIN TYPE_MINVAL(char)
#endif
#ifndef CHAR_MAX
#define CHAR_MAX TYPE_MAXVAL(char)
#endif
#ifndef UCHAR_MAX
#define UCHAR_MAX TYPE_MAXVAL(unsigned char)
#endif
#ifndef SHRT_MIN
#define SHRT_MIN TYPE_MINVAL(short)
#endif
#ifndef SHRT_MAX
#define SHRT_MAX TYPE_MAXVAL(short)
#endif
#ifndef USHRT_MAX
#define USHRT_MAX TYPE_MAXVAL(unsigned short)
#endif
#ifndef INT_MIN
#define INT_MIN TYPE_MINVAL(int)
#endif
#ifndef INT_MAX
#define INT_MAX TYPE_MAXVAL(int)
#endif
#ifndef UINT_MAX
#define UINT_MAX TYPE_MAXVAL(unsigned int)
#endif
#ifndef LONG_MIN
#define LONG_MIN TYPE_MINVAL(long)
#endif
#ifndef LONG_MAX
#define LONG_MAX TYPE_MAXVAL(long)
#endif
#ifndef ULONG_MAX
#define ULONG_MAX TYPE_MAXVAL(unsigned long)
#endif
#ifndef INT8_MIN
#define INT8_MIN TYPE_MINVAL(Int8_t)
#endif
#ifndef INT8_MAX
#define INT8_MAX TYPE_MAXVAL(Int8_t)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX TYPE_MAXVAL(UInt8_t)
#endif
#ifndef INT16_MIN
#define INT16_MIN TYPE_MINVAL(Int16_t)
#endif
#ifndef INT16_MAX
#define INT16_MAX TYPE_MAXVAL(Int16_t)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX TYPE_MAXVAL(UInt16_t)
#endif
#ifndef INT32_MIN
#define INT32_MIN TYPE_MINVAL(Int32_t)
#endif
#ifndef INT32_MAX
#define INT32_MAX TYPE_MAXVAL(Int32_t)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX TYPE_MAXVAL(UInt32_t)
#endif
#ifdef HAVE_INT64_T
#ifndef INT64_MIN
#define INT64_MIN TYPE_MINVAL(Int64_t)
#endif
#ifndef INT64_MAX
#define INT64_MAX TYPE_MAXVAL(Int64_t)
#endif
#endif
#ifdef HAVE_UINT64_T
#ifndef UINT64_MAX
#define UINT64_MAX TYPE_MAXVAL(UInt64_t)
#endif
#endif
#ifndef INTMAX_MIN
#define INTMAX_MIN TYPE_MINVAL(Intmax_t)
#endif
#ifndef INTMAX_MAX
#define INTMAX_MAX TYPE_MAXVAL(Intmax_t)
#endif
#ifndef UINTMAX_MAX
#define UINTMAX_MAX TYPE_MAXVAL(UIntmax_t)
#endif
#endif /* _UTYPES_H */
|