|
|
|
@ -99,35 +99,65 @@ typedef struct { |
|
|
|
|
#define BLOCKMAX (ctx->options & CL_SCAN_BLOCKMAX) |
|
|
|
|
#define DETECT_BROKEN (ctx->options & CL_SCAN_BLOCKBROKEN) |
|
|
|
|
|
|
|
|
|
/* based on macros from A. Melnikoff */ |
|
|
|
|
#define cbswap16(v) (((v & 0xff) << 8) | (((v) >> 8) & 0xff)) |
|
|
|
|
#define cbswap32(v) ((((v) & 0x000000ff) << 24) | (((v) & 0x0000ff00) << 8) | \ |
|
|
|
|
(((v) & 0x00ff0000) >> 8) | (((v) & 0xff000000) >> 24)) |
|
|
|
|
#define cbswap64(v) ((((x) & 0x00000000000000ff) << 56) | \ |
|
|
|
|
(((x) & 0x000000000000ff00) << 40) | \
|
|
|
|
|
(((v) & 0x0000000000ff0000) << 24) | \
|
|
|
|
|
(((v) & 0x00000000ff000000) << 8) | \
|
|
|
|
|
(((v) & 0x000000ff00000000) >> 8) | \
|
|
|
|
|
(((v) & 0x0000ff0000000000) >> 24) | \
|
|
|
|
|
(((v) & 0x00ff000000000000) >> 40) | \
|
|
|
|
|
(((v) & 0xff00000000000000) >> 56)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if WORDS_BIGENDIAN == 0 |
|
|
|
|
/* new macros from A. Melnikoff */ |
|
|
|
|
/* Little endian */ |
|
|
|
|
#define le16_to_host(v) (v) |
|
|
|
|
#define le32_to_host(v) (v) |
|
|
|
|
#define le64_to_host(v) (v) |
|
|
|
|
#define be16_to_host(v) ((v >> 8) | ((v & 0xFF) << 8)) |
|
|
|
|
#define be32_to_host(v) ((v >> 24) | ((v & 0x00FF0000) >> 8) | \ |
|
|
|
|
((v & 0x0000FF00) << 8) | (v << 24)) |
|
|
|
|
#define be64_to_host(v) ((v >> 56) | ((v & 0x00FF000000000000LL) >> 40) | \ |
|
|
|
|
((v & 0x0000FF0000000000LL) >> 24) | \
|
|
|
|
|
((v & 0x000000FF00000000LL) >> 8) | \
|
|
|
|
|
((v & 0x00000000FF000000LL) << 8) | \
|
|
|
|
|
((v & 0x0000000000FF0000LL) << 24) | \
|
|
|
|
|
((v & 0x000000000000FF00LL) << 40) | \
|
|
|
|
|
(v << 56)) |
|
|
|
|
#define be16_to_host(v) cbswap16(v) |
|
|
|
|
#define be32_to_host(v) cbswap32(v) |
|
|
|
|
#define be64_to_host(v) cbswap64(v) |
|
|
|
|
#define cli_readint32(buff) (*(const int32_t *)(buff)) |
|
|
|
|
#define cli_readint16(buff) (*(const int16_t *)(buff)) |
|
|
|
|
#define cli_writeint32(offset, value) (*(uint32_t *)(offset)=(uint32_t)(value)) |
|
|
|
|
#else |
|
|
|
|
#define le16_to_host(v) ((v >> 8) | ((v & 0xFF) << 8)) |
|
|
|
|
#define le32_to_host(v) ((v >> 24) | ((v & 0x00FF0000) >> 8) | \ |
|
|
|
|
((v & 0x0000FF00) << 8) | (v << 24)) |
|
|
|
|
#define le64_to_host(v) ((v >> 56) | ((v & 0x00FF000000000000LL) >> 40) | \ |
|
|
|
|
((v & 0x0000FF0000000000LL) >> 24) | \
|
|
|
|
|
((v & 0x000000FF00000000LL) >> 8) | \
|
|
|
|
|
((v & 0x00000000FF000000LL) << 8) | \
|
|
|
|
|
((v & 0x0000000000FF0000LL) << 24) | \
|
|
|
|
|
((v & 0x000000000000FF00LL) << 40) | \
|
|
|
|
|
(v << 56)) |
|
|
|
|
/* Big endian */ |
|
|
|
|
#define le16_to_host(v) cbswap16(v) |
|
|
|
|
#define le32_to_host(v) cbswap32(v) |
|
|
|
|
#define le64_to_host(v) cbswap64(v) |
|
|
|
|
#define be16_to_host(v) (v) |
|
|
|
|
#define be32_to_host(v) (v) |
|
|
|
|
#define be64_to_host(v) (v) |
|
|
|
|
|
|
|
|
|
static inline int32_t cli_readint32(const char *buff) |
|
|
|
|
{ |
|
|
|
|
int32_t ret; |
|
|
|
|
ret = buff[0] & 0xff; |
|
|
|
|
ret |= (buff[1] & 0xff) << 8; |
|
|
|
|
ret |= (buff[2] & 0xff) << 16; |
|
|
|
|
ret |= (buff[3] & 0xff) << 24; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline int16_t cli_readint32(const char *buff) |
|
|
|
|
{ |
|
|
|
|
int16_t ret; |
|
|
|
|
ret = buff[0] & 0xff; |
|
|
|
|
ret |= (buff[1] & 0xff) << 8; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void cli_writeint32(char *offset, uint32_t value) |
|
|
|
|
{ |
|
|
|
|
offset[0] = value & 0xff; |
|
|
|
|
offset[1] = (value & 0xff00) >> 8; |
|
|
|
|
offset[2] = (value & 0xff0000) >> 16; |
|
|
|
|
offset[3] = (value & 0xff000000) >> 24; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/* used by: spin, yc (C) aCaB */ |
|
|
|
@ -201,36 +231,4 @@ void cli_bitset_free(bitset_t *bs); |
|
|
|
|
int cli_bitset_set(bitset_t *bs, unsigned long bit_offset); |
|
|
|
|
int cli_bitset_test(bitset_t *bs, unsigned long bit_offset); |
|
|
|
|
|
|
|
|
|
#if WORDS_BIGENDIAN == 0 |
|
|
|
|
#define cli_readint32(buff) (*(const int32_t *)(buff)) |
|
|
|
|
#define cli_readint16(buff) (*(const int16_t *)(buff)) |
|
|
|
|
#define cli_writeint32(offset, value) (*(uint32_t *)(offset)=(uint32_t)(value)) |
|
|
|
|
#else |
|
|
|
|
static inline int32_t cli_readint32(const char *buff) |
|
|
|
|
{ |
|
|
|
|
int32_t ret; |
|
|
|
|
ret = buff[0] & 0xff; |
|
|
|
|
ret |= (buff[1] & 0xff) << 8; |
|
|
|
|
ret |= (buff[2] & 0xff) << 16; |
|
|
|
|
ret |= (buff[3] & 0xff) << 24; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline int16_t cli_readint32(const char *buff) |
|
|
|
|
{ |
|
|
|
|
int16_t ret; |
|
|
|
|
ret = buff[0] & 0xff; |
|
|
|
|
ret |= (buff[1] & 0xff) << 8; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void cli_writeint32(char *offset, uint32_t value) |
|
|
|
|
{ |
|
|
|
|
offset[0] = value & 0xff; |
|
|
|
|
offset[1] = (value & 0xff00) >> 8; |
|
|
|
|
offset[2] = (value & 0xff0000) >> 16; |
|
|
|
|
offset[3] = (value & 0xff000000) >> 24; |
|
|
|
|
} |
|
|
|
|
#endif /* WORDS_BIGENDIAN == 0 */ |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|