common/strbuf: added chop function
This commit is contained in:
parent
69b418472e
commit
3abbb2b63e
3 changed files with 42 additions and 0 deletions
|
|
@ -12,6 +12,7 @@
|
|||
#include <string.h>
|
||||
#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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue