buffer: adding buffer_cstr_release
This commit is contained in:
parent
5245d19d71
commit
710f761cc6
2 changed files with 22 additions and 0 deletions
20
buffer.c
20
buffer.c
|
|
@ -55,6 +55,26 @@ char* buffer_cstr(struct buffer *b) {
|
||||||
return (char*) b->block;
|
return (char*) b->block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* buffer_cstr_release(struct buffer *b) {
|
||||||
|
|
||||||
|
char *ret;
|
||||||
|
|
||||||
|
if (b->size) {
|
||||||
|
if (b->len + 1 != b->size) {
|
||||||
|
ret = realloc(b->block, b->len + 1);
|
||||||
|
} else {
|
||||||
|
ret = (char *) b->block;
|
||||||
|
}
|
||||||
|
b->block[b->len + 1] = '\0';
|
||||||
|
} else {
|
||||||
|
ret = calloc(1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer_init(b);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void buffer_free(struct buffer *b) {
|
void buffer_free(struct buffer *b) {
|
||||||
|
|
||||||
if (!b->size)
|
if (!b->size)
|
||||||
|
|
|
||||||
2
buffer.h
2
buffer.h
|
|
@ -63,6 +63,8 @@ static inline void buffer_reduce(struct buffer *b, size_t len) {
|
||||||
|
|
||||||
char* buffer_cstr(struct buffer *b);
|
char* buffer_cstr(struct buffer *b);
|
||||||
|
|
||||||
|
char* buffer_cstr_release(struct buffer *b);
|
||||||
|
|
||||||
void buffer_free(struct buffer *b);
|
void buffer_free(struct buffer *b);
|
||||||
|
|
||||||
void buffer_attach(struct buffer *b, void *str, size_t len, size_t size);
|
void buffer_attach(struct buffer *b, void *str, size_t len, size_t size);
|
||||||
|
|
|
||||||
Reference in a new issue