Files
cworker/clib/cstring.c
Олег Бородин e9b9df0356 at work
2023-09-05 11:30:10 +02:00

52 lines
1.1 KiB
C

/*
*
* Copyright 2023 Oleg Borodin <borodin@unix7.org>
*
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <cstring.h>
#define INIT_CAPA 128
/* String container */
void* cstring_init(cstring_t* str) {
size_t memsize = (INIT_CAPA + 1)*sizeof(char);
str->data = malloc(memsize);
if (str->data == NULL) return NULL;
//memset(str->data, '\0', memsize);
str->capa = INIT_CAPA;
str->size = 0;
str->data[str->size] = '\0';
return str->data;
}
void* cstring_append(cstring_t* str, char* add) {
size_t addsize = strlen(add);
size_t newsize = str->size + addsize;
if (newsize > str->capa) {
size_t newcapa = (str->capa*24)/18 + addsize*3;
char* newstr = realloc(str->data, (newcapa + 1)*sizeof(char));
if (newstr == NULL) return NULL;
str->data = newstr;
str->capa = newcapa;
}
memcpy(&(str->data[str->size]), add, addsize);
str->data[newsize] = '\0';
str->size = newsize;
return str->data;
}
char* cstring_getref(cstring_t* str) {
return str->data;
}
void cstring_destroy(cstring_t* str) {
if (str == NULL) return;
free(str->data);
}