Archived
1
0
Fork 0

common/strbuf: new function strbuf_term

This commit is contained in:
H Hautakoski 2010-09-18 20:16:24 +02:00 committed by Henrik Hautakoski
parent 2c2c0781d9
commit 8b0772d0f1
3 changed files with 30 additions and 2 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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;
}