X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/d23763dae4f649cc29a923298e0232ffdf608744..98ff9295493ed2b990f30768e11b18b6bc65eaa4:/struct/buf.h diff --git a/struct/buf.h b/struct/buf.h index 8201c49..e169aa8 100644 --- a/struct/buf.h +++ b/struct/buf.h @@ -289,6 +289,26 @@ extern int buf_fill(buf */*b*/, int /*ch*/, size_t /*sz*/); extern int dbuf_fill(dbuf */*db*/, int /*ch*/, size_t /*sz*/); #define dbuf_fill(db, ch, sz) (buf_fill(DBUF_BUF(db), (ch), (sz))) +/* --- @{,d}buf_align@ --- * + * + * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block + * @size_t m, a@ = alignment multiple and offset + * @size_t *sz_out@ = where to put the length + * + * Returns: Pointer to previous buffer position, or null on error. + * + * Use: Advance the buffer position as little as possible such that + * it is @a@ greater than a multiple of @m@, returning the + * (possibly empty) portion of the buffer passed over. + */ + +extern void *buf_align(buf */*b*/, size_t /*m*/, size_t /*a*/, + size_t */*sz_out*/); +extern void *dbuf_align(dbuf */*db*/, size_t /*m*/, size_t /*a*/, + size_t */*sz_out*/); +#define dbuf_align(db, m, a, sz_out) \ + (buf_align(DBUF_BUF(db), (m), (a), (sz_out))) + /* --- @{,d}buf_alignskip@ --- * * * Arguments: @buf *b@ or @dbuf *db@ = pointer to a buffer block