X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=src%2Fcstring.c;h=558a78662bc29aa2a68859a58f1d0b01e20ec171;hb=42a0fbc2fa198be33df372c198c225d6fb0de33e;hp=d00421791e5aa1be7c7cdd8b2243ba6002a18b09;hpb=b1e0c986d6e531f71d0a3ecc01551ab2d9cd8929;p=smdp.git diff --git a/src/cstring.c b/src/cstring.c index d004217..558a786 100644 --- a/src/cstring.c +++ b/src/cstring.c @@ -19,7 +19,7 @@ * */ -#include // strlen +#include // strlen, memmove #include // fprintf #include // malloc, realloc @@ -32,6 +32,7 @@ cstring_t *cstring_init() { x->size = x->alloc = 0; x->expand = cstring_expand; x->expand_arr = cstring_expand_arr; + x->strip = cstring_strip; x->reset = cstring_reset; x->delete = cstring_delete; } else { @@ -67,6 +68,18 @@ void cstring_expand_arr(cstring_t *self, char *x) { self->text[self->size+1] = '\0'; } +void cstring_strip(cstring_t *self, int pos, int len) { + if(pos + len >= self->size) { + if(pos <= self->size) { + self->text[pos] = '\0'; + self->size = pos; + } + return; + } + memmove(&self->text[pos], &self->text[pos+len], self->size - pos - len+1); + self->size -= len; +} + void cstring_reset(cstring_t *self) { free(self->text); self->text = NULL;