chiark / gitweb /
@@@ tty mess
[mLib] / struct / buf.h
index 8201c49f1bddc06216a2e8180d5dc8ae4e4e179f..e169aa8b8b6ae8eefc207f3ffb90db8b83ccb0ed 100644 (file)
@@ -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