#ifndef SORM_STR_H #define SORM_STR_H #include #include #include #include typedef struct sormstr_t { char * content; size_t length; size_t buffer_size; size_t size; } sormstr_t; sormstr_t * sormstrn(size_t buffer_size){ sormstr_t * result = (sormstr_t *)malloc(sizeof(sormstr_t)); result->length = 0; result->size = buffer_size; result->buffer_size = buffer_size; result->content = (char *)malloc(buffer_size); result->content[0] = 0; return result; } void sormstra(sormstr_t * str, const char * to_append){ size_t required_new_length = str->length + strlen(to_append); str->length += strlen(to_append); if(required_new_length > str->size){ str->size += required_new_length + str->buffer_size; str->content = realloc(str->content,str->size + 1); }else{ // printf("NO NDEED\n"); } strcat(str->content,to_append); str->content[str->length] = 0; } void sormstrd(sormstr_t * str){ if(str->content){ free(str->content); } free(str); } char * sormstrc(sormstr_t * str){ // sorm str convert char * content = str->content; str->content = NULL; sormstrd(str); return content; } #endif