Files
drawer/src/str.c
2025-11-14 22:28:31 +02:00

47 lines
862 B
C

#include <u.h>
#include <libc.h>
#include "str.h"
void str_buf_clear(Str_Buf *buf)
{
buf->length = 0;
}
void str_buf_delete(Str_Buf *buf)
{
if(buf->contents)
{
free(buf->contents);
buf->contents = 0;
}
buf->length = buf->capacity = 0;
}
void str_buf_push_char(Str_Buf *buf, char ch)
{
if(buf->length == buf->capacity)
{
uintptr new_capacity = buf->capacity ? buf->capacity * 2 : 8;
char *new_contents = malloc(new_capacity);
memcpy(new_contents, buf->contents, buf->length);
if(buf->contents)
free(buf->contents);
buf->contents = new_contents;
buf->capacity = new_capacity;
}
buf->contents[buf->length++] = ch;
}
void str_buf_append_cstr(Str_Buf *buf, const char *str)
{
while(*str)
str_buf_push_char(buf, *(str++));
}
char *str_buf_to_cstr(Str_Buf *buf)
{
str_buf_push_char(buf, 0);
buf->length--;
return buf->contents;
}