diff --git a/src/utils/strbuf.c b/src/utils/strbuf.c
index 77d19f044d71a1fec89ec629877d0deda5b3585d..6190e3a8a045a650c26067a0d637003bf321ded9 100644 (file)
--- a/src/utils/strbuf.c
+++ b/src/utils/strbuf.c
} /* sdb_strbuf_chomp */
void
} /* sdb_strbuf_chomp */
void
-sdb_strbuf_skip(sdb_strbuf_t *strbuf, size_t n)
+sdb_strbuf_skip(sdb_strbuf_t *strbuf, size_t offset, size_t n)
{
{
+ char *start;
+ size_t len;
+
if ((! strbuf) || (! n))
return;
if ((! strbuf) || (! n))
return;
- if (n >= strbuf->pos) {
- strbuf->string[0] = '\0';
- strbuf->pos = 0;
+ if (offset >= strbuf->pos)
+ return;
+
+ len = strbuf->pos - offset;
+
+ if (n >= len) {
+ strbuf->string[offset] = '\0';
+ strbuf->pos = offset;
return;
}
return;
}
- assert(n < strbuf->pos);
- memmove(strbuf->string, strbuf->string + n, strbuf->pos - n);
+ assert(offset + n < strbuf->pos);
+ assert(offset < strbuf->pos);
+
+ start = strbuf->string + offset;
+ memmove(start, start + n, strbuf->pos - n);
strbuf->pos -= n;
strbuf->string[strbuf->pos] = '\0';
} /* sdb_strbuf_skip */
strbuf->pos -= n;
strbuf->string[strbuf->pos] = '\0';
} /* sdb_strbuf_skip */