/* * Copyright (C) 2020-2021 Tomasz Kramkowski * SPDX-License-Identifier: MIT */ #ifndef PACK_COMMON_H #define PACK_COMMON_H #include #include #include #include "pack.h" #define BITMASK(n) (UINTMAX_MAX >> (sizeof (uintmax_t) * CHAR_BIT - n)) #define SET_AND_GOTO(what, to, where) \ do { (what) = (to); goto where; } while (0); #ifndef PRIuSIZE #ifdef _WIN32 #ifdef _WIN64 #define PRIuSIZE PRIu64 #else #define PRIuSIZE PRIu32 #endif #else #define PRIuSIZE "zu" #endif #endif #define ITYPE_MACROS \ T(SCHAR, signed, char, int) \ T(UCHAR, unsigned, char, int) \ T(SHORT, signed, short, int) \ T(USHORT, unsigned, short, int) \ T(INT, signed, int, int) \ T(UINT, unsigned, int, int) \ T(LONG, signed, long, long) \ T(ULONG, unsigned, long, long) \ T(LLONG, signed, long long, long long) \ T(ULLONG, unsigned, long long, long long) // safe_islower: islower but no domain errors static inline int safe_islower(int c) { if (c < 0 || c > UCHAR_MAX) return 0; return islower(c); } size_t getsize(enum pack_type t); #endif // !PACK_COMMON_H