From 820836b589b97ddfb21489aa736300721e5049bb Mon Sep 17 00:00:00 2001 Message-Id: <820836b589b97ddfb21489aa736300721e5049bb.1713577184.git.mdw@distorted.org.uk> From: Mark Wooding Date: Tue, 9 May 2023 21:08:21 +0100 Subject: [PATCH] struct/buf.c: Add functions for serializing and deserializing `kludge64'. Organization: Straylight/Edgeware From: Mark Wooding Not sure how these got missed. --- struct/buf.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ struct/buf.h | 28 ++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/struct/buf.c b/struct/buf.c index bd16ec7..11b1425 100644 --- a/struct/buf.c +++ b/struct/buf.c @@ -187,6 +187,34 @@ int buf_putbyte(buf *b, int ch) } DOUINTCONV(BUF_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. + */ + +int buf_getk64(buf *b, kludge64 *w) +{ + if (BENSURE(b, 8)) return (-1); + LOAD64_(*w, b->p); BSTEP(b, 8); return (0); +} + +int buf_getk64l(buf *b, kludge64 *w) +{ + if (BENSURE(b, 8)) return (-1); + LOAD64_L_(*w, b->p); BSTEP(b, 8); return (0); +} + +int buf_getk64b(buf *b, kludge64 *w) +{ + if (BENSURE(b, 8)) return (-1); + LOAD64_B_(*w, b->p); BSTEP(b, 8); return (0); +} + /* --- @buf_putu{8,{16,24,32,64}{,l,b}}@ --- * * * Arguments: @buf *b@ = pointer to a buffer block @@ -207,6 +235,34 @@ DOUINTCONV(BUF_GETU_) } DOUINTCONV(BUF_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. + */ + +int buf_putk64(buf *b, kludge64 w) +{ + if (BENSURE(b, 8)) return (-1); + STORE64_(b->p, w); BSTEP(b, 8); return (0); +} + +int buf_putk64l(buf *b, kludge64 w) +{ + if (BENSURE(b, 8)) return (-1); + STORE64_L_(b->p, w); BSTEP(b, 8); return (0); +} + +int buf_putk64b(buf *b, kludge64 w) +{ + if (BENSURE(b, 8)) return (-1); + STORE64_B_(b->p, w); BSTEP(b, 8); return (0); +} + /* --- @findz@ --- * * * Arguments: @buf *b@ = pointer to a buffer block diff --git a/struct/buf.h b/struct/buf.h index a3585b4..97dbd10 100644 --- a/struct/buf.h +++ b/struct/buf.h @@ -199,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 @@ -213,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 -- [mdw]