/* ints.h -- create integer types for 8, 16, 32, and 64 bits * Copyright (C) 2024 Mark Adler * For conditions of distribution and use, see the copyright notice in zlib.h * * There exist compilers with limits.h, but not stdint.h or inttypes.h. */ #ifndef INTS_H #define INTS_H #include #if defined(UCHAR_MAX) && UCHAR_MAX == 0xff typedef signed char i8_t; typedef unsigned char ui8_t; #else # error "no 8-bit integer" #endif #if defined(USHRT_MAX) && USHRT_MAX == 0xffff typedef short i16_t; typedef unsigned short ui16_t; #elif defined(UINT_MAX) && UINT_MAX == 0xffff typedef int i16_t; typedef unsigned ui16_t; #else # error "no 16-bit integer" #endif #if defined(UINT_MAX) && UINT_MAX == 0xffffffff typedef int i32_t; typedef unsigned ui32_t; # define PI32 "d" # define PUI32 "u" #elif defined(ULONG_MAX) && ULONG_MAX == 0xffffffff typedef long i32_t; typedef unsigned long ui32_t; # define PI32 "ld" # define PUI32 "lu" #else # error "no 32-bit integer" #endif #if defined(ULONG_MAX) && ULONG_MAX == 0xffffffffffffffff typedef long i64_t; typedef unsigned long ui64_t; # define PI64 "ld" # define PUI64 "lu" #elif defined(ULLONG_MAX) && ULLONG_MAX == 0xffffffffffffffff typedef long long i64_t; typedef unsigned long long ui64_t; # define PI64 "lld" # define PUI64 "llu" #elif defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 0xffffffffffffffff typedef long long i64_t; typedef unsigned long long ui64_t; # define PI64 "lld" # define PUI64 "llu" #else # error "no 64-bit integer" #endif #endif