X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fff-binary.h;h=ce015a3ba8d5844bf4de2af9410df525870eb193;hb=5034fae83a7c3560d75ef5c746dcb535d3d97766;hp=edba770cfac02fe54fb42bf12a01e5d67657ab28;hpb=031256ad2e123eec58521f8e3eb9496c197641d2;p=libucw.git diff --git a/ucw/ff-binary.h b/ucw/ff-binary.h index edba770c..ce015a3b 100644 --- a/ucw/ff-binary.h +++ b/ucw/ff-binary.h @@ -11,8 +11,35 @@ #ifndef _UCW_FF_BINARY_H #define _UCW_FF_BINARY_H -#include "ucw/fastbuf.h" -#include "ucw/unaligned.h" +#include +#include + +#ifdef CONFIG_UCW_CLEAN_ABI +#define bget5_be_slow ucw_bget5_be_slow +#define bget5_le_slow ucw_bget5_le_slow +#define bget5_slow ucw_bget5_slow +#define bgetl_be_slow ucw_bgetl_be_slow +#define bgetl_le_slow ucw_bgetl_le_slow +#define bgetl_slow ucw_bgetl_slow +#define bgetq_be_slow ucw_bgetq_be_slow +#define bgetq_le_slow ucw_bgetq_le_slow +#define bgetq_slow ucw_bgetq_slow +#define bgetw_be_slow ucw_bgetw_be_slow +#define bgetw_le_slow ucw_bgetw_le_slow +#define bgetw_slow ucw_bgetw_slow +#define bput5_be_slow ucw_bput5_be_slow +#define bput5_le_slow ucw_bput5_le_slow +#define bput5_slow ucw_bput5_slow +#define bputl_be_slow ucw_bputl_be_slow +#define bputl_le_slow ucw_bputl_le_slow +#define bputl_slow ucw_bputl_slow +#define bputq_be_slow ucw_bputq_be_slow +#define bputq_le_slow ucw_bputq_le_slow +#define bputq_slow ucw_bputq_slow +#define bputw_be_slow ucw_bputw_be_slow +#define bputw_le_slow ucw_bputw_le_slow +#define bputw_slow ucw_bputw_slow +#endif #ifdef CPU_BIG_ENDIAN #define FF_ENDIAN be @@ -20,6 +47,32 @@ #define FF_ENDIAN le #endif +/*** + * + * We define several functions to read or write binary integer values. + * + * The name patterns for such routines are: + * + * - `TYPE bget \#\# NAME \#\# ENDIAN(struct fastbuf *f);` + * - `void bput \#\# NAME \#\# ENDIAN(struct fastbuf *f, TYPE value);` + * + * where `NAME` together with `TYPE` can be: + * + * - `w` for 16-bit unsigned integers stored in sequences of 2 bytes, the `TYPE` is int + * - `l` for 32-bit unsigned integers stored in sequences of 4 bytes, the `TYPE` is uint + * - `5` for 40-bit unsigned integers stored in sequences of 5 bytes, the `TYPE` is u64 + * - `q` for 64-bit unsigned integers stored in sequences of 8 bytes, the `TYPE` is u64 + * + * and supported `ENDIAN` suffixes are: + * + * - empty for the default order of bytes (defined by CPU) + * - `_le` for little-endian + * - `_be` for big-endian + * + * If we fail to read enough bytes because of EOF, the reading function returns `(TYPE)-1`. + * + ***/ + #define GET_FUNC(type, name, bits, endian) \ type bget##name##_##endian##_slow(struct fastbuf *f); \ static inline type bget##name##_##endian(struct fastbuf *f) \ @@ -58,7 +111,7 @@ #define FF_ALL(type, name, bits, defendian) FF_ALL_X(type, name, bits, defendian) FF_ALL(int, w, 16, FF_ENDIAN) -FF_ALL(uns, l, 32, FF_ENDIAN) +FF_ALL(uint, l, 32, FF_ENDIAN) FF_ALL(u64, q, 64, FF_ENDIAN) FF_ALL(u64, 5, 40, FF_ENDIAN)