X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Ftypes.h;h=260c981c9397df323f50f8eb50ac0672c80d5ee7;hb=9f3d614e4578bdec2b60d97caec400b28d4af9d3;hp=3e0e5c32270df80a5102fc11ba68fed32e6445f9;hpb=a2bf30a4fd407c55e8172e2f6fd158725ccb90b6;p=pciutils.git diff --git a/lib/types.h b/lib/types.h index 3e0e5c3..260c981 100644 --- a/lib/types.h +++ b/lib/types.h @@ -1,48 +1,46 @@ /* * The PCI Library -- Types and Format Strings * - * Copyright (c) 1997--2008 Martin Mares + * Copyright (c) 1997--2022 Martin Mares * - * Can be freely distributed and used under the terms of the GNU GPL. + * Can be freely distributed and used under the terms of the GNU GPL v2+ + * + * SPDX-License-Identifier: GPL-2.0-or-later */ #include +#include #ifndef PCI_HAVE_Uxx_TYPES #ifdef PCI_OS_WINDOWS -#include +/* On Windows compilers, use */ +#include typedef BYTE u8; typedef WORD u16; typedef DWORD u32; -#elif defined(PCI_HAVE_STDINT_H) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +typedef unsigned __int64 u64; +#define PCI_U64_FMT_X "I64x" +#define PCI_U64_FMT_U "I64u" + +#else +/* Use standard types in C99 and newer */ #include +#include typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; -#else -typedef u_int8_t u8; -typedef u_int16_t u16; -typedef u_int32_t u32; -#endif - -#ifdef PCI_HAVE_64BIT_ADDRESS -#include -#if ULONG_MAX > 0xffffffff -typedef unsigned long u64; -#define PCI_U64_FMT "l" -#else -typedef unsigned long long u64; -#define PCI_U64_FMT "ll" -#endif +typedef uint64_t u64; +#define PCI_U64_FMT_X PRIx64 +#define PCI_U64_FMT_U PRIu64 #endif #endif /* PCI_HAVE_Uxx_TYPES */ #ifdef PCI_HAVE_64BIT_ADDRESS typedef u64 pciaddr_t; -#define PCIADDR_T_FMT "%08" PCI_U64_FMT "x" -#define PCIADDR_PORT_FMT "%04" PCI_U64_FMT "x" +#define PCIADDR_T_FMT "%08" PCI_U64_FMT_X +#define PCIADDR_PORT_FMT "%04" PCI_U64_FMT_X #else typedef u32 pciaddr_t; #define PCIADDR_T_FMT "%08x" @@ -58,8 +56,12 @@ typedef u32 pciaddr_t; #define PCIIRQ_FMT "%d" #endif -#ifdef __GNUC__ +#if defined(__GNUC__) && __GNUC__ > 2 #define PCI_PRINTF(x,y) __attribute__((format(printf, x, y))) +#define PCI_NONRET __attribute((noreturn)) +#define PCI_PACKED __attribute((packed)) #else #define PCI_PRINTF(x,y) +#define PCI_NONRET +#define PCI_PACKED #endif