X-Git-Url: https://git.distorted.org.uk/~mdw/mLib/blobdiff_plain/18c831dcd0ae4d660c70ccac69d27ed2a97851be..68d704b33b76ba921feb5714cf19a02b17a86599:/struct/buf.h diff --git a/struct/buf.h b/struct/buf.h index b96a886..97dbd10 100644 --- a/struct/buf.h +++ b/struct/buf.h @@ -44,6 +44,10 @@ # include "dstr.h" #endif +#ifndef MLIB_MACROS_H +# include "macros.h" +#endif + /*----- Data structures ---------------------------------------------------*/ /* --- Buffers --- * @@ -71,8 +75,14 @@ typedef struct buf { #define BBAD(b) ((b)->f & BF_BROKEN) #define BOK(b) (!BBAD(b)) -#define BENSURE(b, sz) \ - (BBAD(b) ? -1 : (sz) > BLEFT(b) ? (b)->f |= BF_BROKEN, -1 : 0) +#if GCC_VERSION_P(8, 0) +# define BENSURE(b, sz) \ + MUFFLE_WARNINGS_EXPR(GCC_WARNING("-Wint-in-bool-context"), \ + (BBAD(b) ? -1 : (sz) > BLEFT(b) ? (b)->f |= BF_BROKEN, -1 : 0)) +#else +# define BENSURE(b, sz) \ + (BBAD(b) ? -1 : (sz) > BLEFT(b) ? (b)->f |= BF_BROKEN, -1 : 0) +#endif #define BUF_DOSUFFIXES(_) DOUINTCONV(_) _(z, z, z) @@ -189,6 +199,20 @@ extern int buf_putbyte(buf */*b*/, int /*ch*/); extern int buf_getu##w(buf */*b*/, uint##n */*w*/); DOUINTCONV(BUF_DECL_GETU_) +/* --- @buf_getk64{,l,b}@ --- * + * + * Arguments: @buf *b@ = pointer to a buffer block + * @kludge64 *w@ = where to put the word + * + * Returns: Zero if OK, or nonzero if there wasn't a word there. + * + * Use: Gets a word of appropriate size and order from a buffer. + */ + +extern int buf_getk64(buf */*b*/, kludge64 */*w*/); +extern int buf_getk64l(buf */*b*/, kludge64 */*w*/); +extern int buf_getk64b(buf */*b*/, kludge64 */*w*/); + /* --- @buf_putu{8,{16,24,32,64}{,l,b}}@ --- * * * Arguments: @buf *b@ = pointer to a buffer block @@ -203,6 +227,20 @@ DOUINTCONV(BUF_DECL_GETU_) extern int buf_putu##w(buf */*b*/, uint##n /*w*/); DOUINTCONV(BUF_DECL_PUTU_) +/* --- @buf_putk64{,l,b}@ --- * + * + * Arguments: @buf *b@ = pointer to a buffer block + * @kludge64 w@ = word to write + * + * Returns: Zero if OK, or nonzero if there wasn't enough space + * + * Use: Gets a word of appropriate size and order from a buffer. + */ + +extern int buf_putk64(buf */*b*/, kludge64 /*w*/); +extern int buf_putk64l(buf */*b*/, kludge64 /*w*/); +extern int buf_putk64b(buf */*b*/, kludge64 /*w*/); + /* --- @buf_getmem{8,{16,24,32,64}{,l,b},z} --- * * * Arguments: @buf *b@ = pointer to a buffer block