X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils%2Fstrbuf.c;h=6190e3a8a045a650c26067a0d637003bf321ded9;hb=49f6d1d1aea28e246c10c04d90afc3fcf831ff9b;hp=77d19f044d71a1fec89ec629877d0deda5b3585d;hpb=2e2e989712ec5991526b3aaeec011440adb5bf7e;p=sysdb.git diff --git a/src/utils/strbuf.c b/src/utils/strbuf.c index 77d19f0..6190e3a 100644 --- a/src/utils/strbuf.c +++ b/src/utils/strbuf.c @@ -283,19 +283,30 @@ sdb_strbuf_chomp(sdb_strbuf_t *strbuf) } /* 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 (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; } - 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 */