From 58241bc88020e972b7719753c3838a5557ac4d84 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Mon, 17 May 2021 08:22:23 +0000 Subject: xstring: extend memory allocation --- xstring.c | 31 ++++++++++++++++++++++++------- xstring.h | 1 + 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/xstring.c b/xstring.c index 98d91f9..d540828 100644 --- a/xstring.c +++ b/xstring.c @@ -4,19 +4,24 @@ #include "xstring.h" string *string_alloc(const char *text) +{ + return string_nalloc(text, + (text) ? strlen(text) : INIT_LEN_STRING); +} + +string *string_nalloc(const char *text, size_t text_len) { string *str = malloc(sizeof(string)); + str->s = malloc(sizeof(char) * (text_len + 1)); if(text) { - int length = strlen(text); - str->s = malloc(sizeof(char) * (length + 1)); - strcpy(str->s, text); - str->capacity = length; - str->len = length; + strncpy(str->s, text, text_len); + str->capacity = text_len; + str->len = text_len; + str->s[text_len] = '\0'; } else { - str->s = malloc(sizeof(char) * (INIT_LEN_STRING + 1)); str->len = 0; - str->capacity = INIT_LEN_STRING; + str->capacity = text_len; str->s[0] = '\0'; } return str; @@ -39,6 +44,18 @@ void string_reset(string *str) } } +static void string_realloc(string *str, int cap) +{ + int i; + char *tmp_s = str->s; + str->s = malloc(sizeof(char) * (cap + 1)); + for(i = 0; i < cap; i++) + str->s[i] = (i >= str->len) ? '\0' : tmp_s[i]; + + str->capacity = cap; + free(tmp_s); +} + void string_addch(string *str, int ch) { if(str->capacity <= (str->len + 1)) { diff --git a/xstring.h b/xstring.h index 3e98ec9..a0426d6 100644 --- a/xstring.h +++ b/xstring.h @@ -10,6 +10,7 @@ typedef struct tag_string { } string; string *string_alloc(const char *text); +string *string_nalloc(const char *text, size_t text_len); void string_release(string *str); void string_reset(string *str); void string_addch(string *str, int ch); -- cgit v1.2.3-18-g5258