More string and buffer functions.
[apps/madmutt.git] / lib-lib / buffer.c
index f27dc51..4cc4dc5 100644 (file)
@@ -33,6 +33,8 @@ void buffer_splice(buffer_t *buf, ssize_t pos, ssize_t len,
 {
     if (dlen >= len)
         buffer_extend(buf, dlen - len);
+    if (len >= buf->len)
+        len = buf->len;
     memmove(buf->data + pos + dlen,
             buf->data + pos + len,
             buf->len - pos - len);
@@ -40,6 +42,12 @@ void buffer_splice(buffer_t *buf, ssize_t pos, ssize_t len,
     buffer_setlen(buf, buf->len + dlen - len);
 }
 
+void buffer_consume_upto(buffer_t *buf, const char *s)
+{
+    assert (buf->data <= s && s <= buf->data + buf->len);
+    buffer_splice(buf, 0, s - buf->data, NULL, 0);
+}
+
 ssize_t buffer_addvf(buffer_t *buf, const char *fmt, va_list args)
 {
     ssize_t len;