diff --git a/src/utils/strbuf.c b/src/utils/strbuf.c
index 993b086d0ef0adbcb060faf046cd7390f548e4bd..4d8fc8b91ba234df10edd8d15d552169bcbf9930 100644 (file)
--- a/src/utils/strbuf.c
+++ b/src/utils/strbuf.c
#include <stdarg.h>
#include <string.h>
+#include <unistd.h>
+
/*
* private data structures
*/
return sdb_strbuf_memappend(strbuf, data, n);
} /* sdb_strbuf_memcpy */
+ssize_t
+sdb_strbuf_read(sdb_strbuf_t *strbuf, int fd, size_t n)
+{
+ ssize_t ret;
+
+ if (! strbuf)
+ return -1;
+
+ if (strbuf_resize(strbuf, strbuf->pos + n + 1))
+ return -1;
+
+ ret = read(fd, strbuf->string + strbuf->pos, n);
+ if (ret > 0)
+ strbuf->pos += (size_t)ret;
+ return ret;
+} /* sdb_strbuf_read */
+
ssize_t
sdb_strbuf_chomp(sdb_strbuf_t *strbuf)
{
return ret;
} /* sdb_strbuf_chomp */
+void
+sdb_strbuf_skip(sdb_strbuf_t *strbuf, size_t n)
+{
+ if ((! strbuf) || (! n))
+ return;
+
+ if (n >= strbuf->pos) {
+ strbuf->string[0] = '\0';
+ strbuf->pos = 0;
+ return;
+ }
+
+ assert(n < strbuf->pos);
+ memmove(strbuf->string, strbuf->string + n, strbuf->pos - n);
+ strbuf->pos -= n;
+ strbuf->string[strbuf->pos] = '\0';
+} /* sdb_strbuf_skip */
+
const char *
sdb_strbuf_string(sdb_strbuf_t *strbuf)
{