diff options
| -rw-r--r-- | xstring.c | 31 | ||||
| -rw-r--r-- | xstring.h | 1 | 
2 files changed, 25 insertions, 7 deletions
| @@ -5,18 +5,23 @@  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)) {
 @@ -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); | 
