X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/bca75e8d0ad7ce51192de3ef053ec63d0c79cfaa..31d0247cc58abc0b0720aa7e9972011c5a66995c:/struct/buf.c diff --git a/struct/buf.c b/struct/buf.c index 5d1fc27..9efc4fc 100644 --- a/struct/buf.c +++ b/struct/buf.c @@ -37,7 +37,7 @@ /* --- @buf_init@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @void *p@ = pointer to a buffer * @size_t sz@ = size of the buffer * @@ -78,11 +78,7 @@ void dbuf_create(dbuf *db) * Use: Resets a buffer so that it can be written again. */ -void dbuf_reset(dbuf *db) -{ - db->_b.p = db->_b.base; db->_b.limit = db->_b.base + db->sz; - db->_b.f = (db->_b.f&~BF_BROKEN) | BF_WRITE; -} +void dbuf_reset(dbuf *db) { DBRESET(db); } /* --- @dbuf_destroy@ --- * * @@ -99,9 +95,9 @@ void dbuf_destroy(dbuf *db) dbuf_create(db); } -/* --- @buf_break@ --- * +/* --- @{,d}buf_break@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * * Returns: Some negative value. * @@ -109,10 +105,11 @@ void dbuf_destroy(dbuf *db) */ int buf_break(buf *b) { b->f |= BF_BROKEN; return (-1); } +int (dbuf_break)(dbuf *db) { return (dbuf_break(db)); } -/* --- @buf_flip@ --- * +/* --- @{,d}buf_flip@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * * Returns: --- * @@ -120,15 +117,12 @@ int buf_break(buf *b) { b->f |= BF_BROKEN; return (-1); } * you can now read from the bit you've written. */ -void buf_flip(buf *b) -{ - b->limit = b->p; b->p = b->base; - b->f &= ~BF_WRITE; -} +void buf_flip(buf *b) { BFLIP(b); } +void (dbuf_flip)(dbuf *db) { dbuf_flip(db); } -/* --- @buf_ensure@ --- * +/* --- @{,d}buf_ensure@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @size_t sz@ = size of data wanted * * Returns: Zero if it worked, nonzero if there wasn't enough space. @@ -137,10 +131,11 @@ void buf_flip(buf *b) */ int buf_ensure(buf *b, size_t sz) { return (BENSURE(b, sz)); } +int (dbuf_ensure)(dbuf *db, size_t sz) { return (dbuf_ensure(db, sz)); } -/* --- @buf_tryextend@ --- * +/* --- @{,d}buf_tryextend@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @size_t sz@ = size of data wanted * * Returns: Zero if it worked, nonzero if the buffer won't grow. @@ -170,10 +165,12 @@ int buf_tryextend(buf *b, size_t sz) db->_b.limit = db->_b.base + newsz; return (0); } +int (dbuf_tryextend)(dbuf *db, size_t sz) + { return (dbuf_tryextend(db, sz)); } -/* --- @buf_get@ --- * +/* --- @{,d}buf_get@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @size_t sz@ = size of the buffer * * Returns: Pointer to the place in the buffer. @@ -191,10 +188,12 @@ void *buf_get(buf *b, size_t sz) BSTEP(b, sz); return (p); } +void *(dbuf_get)(dbuf *db, size_t sz) + { return (dbuf_get(db, sz)); } -/* --- @buf_put@ --- * +/* --- @{,d}buf_put@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @const void *p@ = pointer to a buffer * @size_t sz@ = size of the buffer * @@ -211,10 +210,12 @@ int buf_put(buf *b, const void *p, size_t sz) BSTEP(b, sz); return (0); } +int (dbuf_put)(dbuf *db, const void *p, size_t sz) + { return (dbuf_put(db, p, sz)); } -/* --- @buf_getbyte@ --- * +/* --- @{,d}buf_getbyte@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * * Returns: A byte, or less than zero if there wasn't a byte there. * @@ -227,10 +228,12 @@ int buf_getbyte(buf *b) return (-1); return (*b->p++); } +int (dbuf_getbyte)(dbuf *db) + { return (dbuf_getbyte(db)); } -/* --- @buf_putbyte@ --- * +/* --- @{,d}buf_putbyte@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @int ch@ = byte to write * * Returns: Zero if OK, nonzero if there wasn't enough space. @@ -245,10 +248,12 @@ int buf_putbyte(buf *b, int ch) *b->p++ = ch; return (0); } +int (dbuf_putbyte)(dbuf *db, int ch) + { return (dbuf_putbyte(db, ch)); } -/* --- @buf_getu{8,{16,24,32,64}{,l,b}}@ --- * +/* --- @{,d}buf_getu{8,{16,24,32,64}{,l,b}}@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @uintSZ *w@ = where to put the word * * Returns: Zero if OK, or nonzero if there wasn't a word there. @@ -263,12 +268,14 @@ int buf_putbyte(buf *b, int ch) *ww = LOAD##W(b->p); \ BSTEP(b, SZ_##W); \ return (0); \ - } + } \ + int (dbuf_getu##w)(dbuf *db, uint##n *ww) \ + { return (dbuf_getu##w(db, ww)); } DOUINTCONV(BUF_GETU_) -/* --- @buf_getk64{,l,b}@ --- * +/* --- @{,d}buf_getk64{,l,b}@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = 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. @@ -294,9 +301,13 @@ int buf_getk64b(buf *b, kludge64 *w) LOAD64_B_(*w, b->p); BSTEP(b, 8); return (0); } -/* --- @buf_putu{8,{16,24,32,64}{,l,b}}@ --- * +int (dbuf_getk64)(dbuf *db, kludge64 *w) { return (dbuf_getk64(db, w)); } +int (dbuf_getk64l)(dbuf *db, kludge64 *w) { return (dbuf_getk64l(db, w)); } +int (dbuf_getk64b)(dbuf *db, kludge64 *w) { return (dbuf_getk64b(db, w)); } + +/* --- @{,d}buf_putu{8,{16,24,32,64}{,l,b}}@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @uintSZ w@ = word to write * * Returns: Zero if OK, or nonzero if there wasn't enough space @@ -311,12 +322,14 @@ int buf_getk64b(buf *b, kludge64 *w) STORE##W(b->p, ww); \ BSTEP(b, SZ_##W); \ return (0); \ - } + } \ + int (dbuf_putu##w)(dbuf *db, uint##n ww) \ + { return (dbuf_putu##w(db, ww)); } DOUINTCONV(BUF_PUTU_) -/* --- @buf_putk64{,l,b}@ --- * +/* --- @{,d}buf_putk64{,l,b}@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @kludge64 w@ = word to write * * Returns: Zero if OK, or nonzero if there wasn't enough space @@ -342,9 +355,13 @@ int buf_putk64b(buf *b, kludge64 w) STORE64_B_(b->p, w); BSTEP(b, 8); return (0); } +int (dbuf_putk64)(dbuf *db, kludge64 w) { return (dbuf_putk64(db, w)); } +int (dbuf_putk64l)(dbuf *db, kludge64 w) { return (dbuf_putk64l(db, w)); } +int (dbuf_putk64b)(dbuf *db, kludge64 w) { return (dbuf_putk64b(db, w)); } + /* --- @findz@ --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @size_t *nn@ = where to put the length * * Returns: Zero if OK, nonzero if there wasn't a null byte to be found. @@ -365,9 +382,9 @@ static int findz(buf *b, size_t *nn) return (0); } -/* --- @buf_getmem{8,{16,24,32,64}{,l,b},z} --- * +/* --- @{,d}buf_getmem{8,{16,24,32,64}{,l,b},z} --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @size_t *nn@ = where to put the length * * Returns: Pointer to the buffer data, or null. @@ -385,7 +402,9 @@ static int findz(buf *b, size_t *nn) if (BENSURE(b, sz)) return (0); \ *nn = sz; \ return (buf_get(b, sz)); \ - } + } \ + void *(dbuf_getmem##w)(dbuf *db, size_t *nn) \ + { return (dbuf_getmem##w(db, nn)); } DOUINTCONV(BUF_GETMEM_) void *buf_getmemz(buf *b, size_t *nn) @@ -393,6 +412,8 @@ void *buf_getmemz(buf *b, size_t *nn) if (findz(b, nn)) return (0); return (buf_get(b, *nn)); } +void *(dbuf_getmemz)(dbuf *db, size_t *nn) + { return (dbuf_getmemz(db, nn)); } #ifndef HAVE_UINT64 @@ -414,27 +435,34 @@ void *buf_getmem64(buf *b, size_t *nn) return (getmem_k64(b, nn, k)); } -void *buf_getmem64b(buf *b, size_t *nn) +void *buf_getmem64l(buf *b, size_t *nn) { kludge64 k; - if (buf_getk64b(b, &k)) return (-1); + if (buf_getk64l(b, &k)) return (-1); return (getmem_k64(b, nn, k)); } -void *buf_getmem64l(buf *b, size_t *nn) +void *buf_getmem64b(buf *b, size_t *nn) { kludge64 k; - if (buf_getk64l(b, &k)) return (-1); + if (buf_getk64b(b, &k)) return (-1); return (getmem_k64(b, nn, k)); } +void *(dbuf_getmem64)(dbuf *db, size_t *nn) + { return (dbuf_getmem64(db, nn)); } +void *(dbuf_getmem64l)(dbuf *db, size_t *nn) + { return (dbuf_getmem64l(db, nn)); } +void *(dbuf_getmem64b)(dbuf *db, size_t *nn) + { return (dbuf_getmem64b(db, nn)); } + #endif -/* --- @buf_putmem{8,{16,24,32,64}{,l,b},z} --- * +/* --- @{,d}buf_putmem{8,{16,24,32,64}{,l,b},z} --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @const void *p@ = pointer to data to write * @size_t n@ = length to write * @@ -454,7 +482,9 @@ void *buf_getmem64l(buf *b, size_t *nn) if (buf_putu##w(b, sz) || buf_put(b, p, sz)) \ return (-1); \ return (0); \ - } + } \ + int (dbuf_putmem##w)(dbuf *db, const void *p, size_t sz) \ + { return (dbuf_putmem##w(db, p, sz)); } DOUINTCONV(BUF_PUTMEM_) #ifndef HAVE_UINT64 @@ -467,22 +497,29 @@ void *buf_putmem64(buf *b, const void *p, size_t n) return (0); } -void *buf_putmem64b(buf *b, const void *p, size_t n) +void *buf_putmem64l(buf *b, const void *p, size_t n) { kludge64 k; - ASSIGN64(k, n); if (buf_putk64b(b, k) || buf_put(b, p, n)) return (-1); + ASSIGN64(k, n); if (buf_putk64l(b, k) || buf_put(b, p, n)) return (-1); return (0); } -void *buf_putmem64l(buf *b, const void *p, size_t n) +void *buf_putmem64b(buf *b, const void *p, size_t n) { kludge64 k; - ASSIGN64(k, n); if (buf_putk64l(b, k) || buf_put(b, p, n)) return (-1); + ASSIGN64(k, n); if (buf_putk64b(b, k) || buf_put(b, p, n)) return (-1); return (0); } +int (dbuf_putmem64)(dbuf *db, const void *p, size_t n) + { return (dbuf_putmem64(db, p, n)); } +int (dbuf_putmem64l)(dbuf *db, const void *p, size_t n) + { return (dbuf_putmem64l(db, p, n)); } +int (dbuf_putmem64b)(dbuf *db, const void *p, size_t n) + { return (dbuf_putmem64b(db, p, n)); } + #endif int buf_putmemz(buf *b, const void *p, size_t n) @@ -496,10 +533,12 @@ int buf_putmemz(buf *b, const void *p, size_t n) q[n] = 0; return (0); } +int (dbuf_putmemz)(dbuf *db, const void *p, size_t n) + { return (dbuf_putmemz(db, p, n)); } -/* --- @buf_getbuf{8,{16,24,32,64}{,l,b},z} --- * +/* --- @{,d}buf_getbuf{8,{16,24,32,64}{,l,b},z} --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @buf *bb@ = where to put the result * * Returns: Zero if it worked, nonzero if there wasn't enough space. @@ -518,12 +557,14 @@ int buf_putmemz(buf *b, const void *p, size_t n) return (-1); \ buf_init(bb, p, sz); \ return (0); \ - } + } \ + int (dbuf_getbuf##w)(dbuf *db, buf *bb) \ + { return (dbuf_getbuf##w(db, bb)); } BUF_DOSUFFIXES(BUF_GETBUF_) -/* --- @buf_putbuf{8,{16,24,32,64}{,l,b},z} --- * +/* --- @{,d}buf_putbuf{8,{16,24,32,64}{,l,b},z} --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @buf *bb@ = buffer to write * * Returns: Zero if it worked, nonzero if there wasn't enough space. @@ -533,12 +574,14 @@ BUF_DOSUFFIXES(BUF_GETBUF_) #define BUF_PUTBUF_(n, W, w) \ int buf_putbuf##w(buf *b, buf *bb) \ - { return (buf_putmem##w(b, BBASE(bb), BLEN(bb))); } + { return (buf_putmem##w(b, BBASE(bb), BLEN(bb))); } \ + int (dbuf_putbuf##w)(dbuf *db, buf *bb) \ + { return (dbuf_putbuf##w(db, bb)); } BUF_DOSUFFIXES(BUF_PUTBUF_) -/* --- @buf_putstr{8,{16,24,32,64}{,l,b},z} --- * +/* --- @{,d}buf_putstr{8,{16,24,32,64}{,l,b},z} --- * * - * Arguments: @buf *b@ = pointer to a buffer block + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block * @const char *p@ = string to write * * Returns: Zero if it worked, nonzero if there wasn't enough space. @@ -548,7 +591,9 @@ BUF_DOSUFFIXES(BUF_PUTBUF_) #define BUF_PUTSTR_(n, W, w) \ int buf_putstr##w(buf *b, const char *p) \ - { return (buf_putmem##w(b, p, strlen(p))); } + { return (buf_putmem##w(b, p, strlen(p))); } \ + int (dbuf_putstr##w)(dbuf *db, const char *p) \ + { return (dbuf_putstr##w(db, p)); } BUF_DOSUFFIXES(BUF_PUTSTR_) /*----- That's all, folks -------------------------------------------------*/