/* * * Copyright 2023 Oleg Borodin * */ #include #include #include #include #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); }