From 3abbb2b63eb3dbc2fb6eec612d570342214e2ff6 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 29 Sep 2010 22:21:38 +0200 Subject: [PATCH] common/strbuf: added chop function --- src/common/strbuf.c | 15 +++++++++++++++ src/common/strbuf.h | 2 ++ test/t_strbuf.c | 25 +++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/common/strbuf.c b/src/common/strbuf.c index 6ca618d..0d3a1dd 100644 --- a/src/common/strbuf.c +++ b/src/common/strbuf.c @@ -12,6 +12,7 @@ #include #include "xalloc.h" #include "strbuf.h" +#include "debug.h" #define CHNK_SIZE 128 @@ -91,6 +92,20 @@ void strbuf_append_ch(strbuf_t *s, char ch) { s->buf[s->len] = '\0'; } +void strbuf_rchop(strbuf_t *s, char ch) { + + int i; + + for(i=s->len-1; i >= 0; i--) { + + if (s->buf[i] == ch) { + s->buf[i] = '\0'; + s->len = i; + break; + } + } +} + void strbuf_term(strbuf_t *s, char ch) { if (s->buf[s->len-1] != ch) diff --git a/src/common/strbuf.h b/src/common/strbuf.h index 4db0c88..d92f0e9 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_rchop(strbuf_t *s, char ch); + void strbuf_term(strbuf_t *s, char ch); void strbuf_trim(strbuf_t *s); diff --git a/test/t_strbuf.c b/test/t_strbuf.c index ca41893..2139623 100644 --- a/test/t_strbuf.c +++ b/test/t_strbuf.c @@ -42,6 +42,29 @@ void test_squeeze() { strbuf_free(&b); } +void test_chop() { + + strbuf_t b = STRBUF_INIT; + + strbuf_rchop(&b, 'X'); + print_strbuf(&b); + + strbuf_append_str(&b, "X"); + + strbuf_rchop(&b, 'X'); + print_strbuf(&b); + + strbuf_append_str(&b, "123456789X123456789"); + + strbuf_rchop(&b, 'X'); + print_strbuf(&b); + + strbuf_rchop(&b, 'X'); + print_strbuf(&b); + + strbuf_free(&b); +} + void test_term() { strbuf_t b = STRBUF_INIT; @@ -109,6 +132,8 @@ int main() { test_squeeze(); test_term(); + + test_chop(); return 0; }