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 <string.h>
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
#define CHNK_SIZE 128
|
#define CHNK_SIZE 128
|
||||||
|
|
||||||
|
|
@ -91,6 +92,20 @@ void strbuf_append_ch(strbuf_t *s, char ch) {
|
||||||
s->buf[s->len] = '\0';
|
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) {
|
void strbuf_term(strbuf_t *s, char ch) {
|
||||||
|
|
||||||
if (s->buf[s->len-1] != 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_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_term(strbuf_t *s, char ch);
|
||||||
|
|
||||||
void strbuf_trim(strbuf_t *s);
|
void strbuf_trim(strbuf_t *s);
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,29 @@ void test_squeeze() {
|
||||||
strbuf_free(&b);
|
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() {
|
void test_term() {
|
||||||
|
|
||||||
strbuf_t b = STRBUF_INIT;
|
strbuf_t b = STRBUF_INIT;
|
||||||
|
|
@ -109,6 +132,8 @@ int main() {
|
||||||
test_squeeze();
|
test_squeeze();
|
||||||
|
|
||||||
test_term();
|
test_term();
|
||||||
|
|
||||||
|
test_chop();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Reference in a new issue