/* * * Copyright 2023 Oleg Borodin * */ #include #include #include #include #define INIT_CAPA 1 /* String container */ void* cstring_init(cstring_t* str) { str->data = malloc((INIT_CAPA + 1)*sizeof(char)); if (str->data == NULL) return NULL; memset(str->data, '\0', INIT_CAPA + 1); str->capa = INIT_CAPA; 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 + addsize; char* newstr = realloc(str->data, (newcapa + 1)*sizeof(char)); if (newstr == NULL) return NULL; str->data = newstr; str->capa = newcapa; } strcpy(&(str->data[str->size]), add); str->data[newsize + 1] = '\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); }