X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Ftypes.h;h=260c981c9397df323f50f8eb50ac0672c80d5ee7;hb=9f3d614e4578bdec2b60d97caec400b28d4af9d3;hp=0b55feb3d081480316d8512f4eeda8afa625477d;hpb=ee7d83845f73a71988e3b847fef2d04b07a9aebd;p=pciutils.git diff --git a/lib/types.h b/lib/types.h index 0b55feb..260c981 100644 --- a/lib/types.h +++ b/lib/types.h @@ -1,45 +1,46 @@ /* * The PCI Library -- Types and Format Strings * - * Copyright (c) 1997--2004 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 -typedef unsigned __int8 u8; -typedef unsigned __int16 u16; -typedef unsigned __int32 u32; -#else -typedef u_int8_t u8; -typedef u_int16_t u16; -typedef u_int32_t u32; -#endif +/* On Windows compilers, use */ +#include +typedef BYTE u8; +typedef WORD u16; +typedef DWORD u32; +typedef unsigned __int64 u64; +#define PCI_U64_FMT_X "I64x" +#define PCI_U64_FMT_U "I64u" -typedef u8 byte; -typedef u16 word; - -#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 +/* Use standard types in C99 and newer */ +#include +#include +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +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 "%016" 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" @@ -54,3 +55,13 @@ typedef u32 pciaddr_t; #else #define PCIIRQ_FMT "%d" #endif + +#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