From 8b0772d0f1f9021bfe4b3fa5ffb203f22f8a2f83 Mon Sep 17 00:00:00 2001 From: H Hautakoski Date: Sat, 18 Sep 2010 20:16:24 +0200 Subject: [PATCH] common/strbuf: new function strbuf_term --- src/common/strbuf.c | 11 ++++++++++- src/common/strbuf.h | 2 ++ test/t_strbuf.c | 19 ++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/common/strbuf.c b/src/common/strbuf.c index 6672b39..6ca618d 100644 --- a/src/common/strbuf.c +++ b/src/common/strbuf.c @@ -91,6 +91,12 @@ void strbuf_append_ch(strbuf_t *s, char ch) { s->buf[s->len] = '\0'; } +void strbuf_term(strbuf_t *s, char ch) { + + if (s->buf[s->len-1] != ch) + strbuf_append_ch(s, ch); +} + void strbuf_trim(strbuf_t *s) { strbuf_rtrim(s); @@ -132,7 +138,10 @@ void strbuf_squeeze(strbuf_t *s, char ch) { size_t p; - for(p=s->len; p; p--) { + if (s->len <= 1) + return; + + for(p=s->len-1; p; p--) { if (s->buf[p] != ch) continue; diff --git a/src/common/strbuf.h b/src/common/strbuf.h index 70750f3..4db0c88 100644 --- a/src/common/strbuf.h +++ b/src/common/strbuf.h @@ -39,6 +39,8 @@ void strbuf_append_str(strbuf_t *s, const char *str); void strbuf_append_ch(strbuf_t *s, char ch); +void strbuf_term(strbuf_t *s, char ch); + void strbuf_trim(strbuf_t *s); void strbuf_rtrim(strbuf_t *s); diff --git a/test/t_strbuf.c b/test/t_strbuf.c index ef2ff74..ca41893 100644 --- a/test/t_strbuf.c +++ b/test/t_strbuf.c @@ -29,7 +29,9 @@ void test_squeeze() { strbuf_t b = STRBUF_INIT; - strbuf_append_str(&b, "aaabXXXcdefXXXXghijklXXmmmnopXXXXXqrstuXXvwxyXXz"); + strbuf_squeeze(&b, 'X'); + + strbuf_append_str(&b, "aaabXXXcdefXXXXghijklXXmmmnopXXXXXqrstuXXvwxyXXzXX"); strbuf_squeeze(&b, 'X'); print_strbuf(&b); strbuf_free(&b); @@ -40,6 +42,19 @@ void test_squeeze() { strbuf_free(&b); } +void test_term() { + + strbuf_t b = STRBUF_INIT; + strbuf_t c = STRBUF_INIT; + strbuf_append_str(&b, "test"); + strbuf_append_str(&c, "test."); + strbuf_term(&b, '.'); + strbuf_term(&c, '.'); + assert(strcmp(b.buf, c.buf) == 0); + strbuf_free(&b); + strbuf_free(&c); +} + void test() { strbuf_t b = STRBUF_INIT; @@ -92,6 +107,8 @@ int main() { test_release_empty(); test_squeeze(); + + test_term(); return 0; }