diff -r 218904410231 -r f600b0d1fc5d gclib/gcstring.c --- a/gclib/gcstring.c Fri Jan 27 00:28:11 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -#include -#include -#include -#include -#include -#include - -/* - * Strings which manage their own memory - */ - -String *string_new(const char *init) -{ - String *string=mem_new(String,1); - if (!init) - init=""; - string->len=strlen(init); - string->alloc=string->len+1; - string->str=str_dup(init); - return string; -} - -/* - * Free a string and either return the contents (if free_segment is FALSE) - * or free the contents as well and return NULL (if free_segment is TRUE). - */ -char *string_free(String *string,boolean free_segment) -{ - char *retval; - if (free_segment) - { - mem_free(string->str); - retval=NULL; - } - else - retval=string->str; - mem_free(string); - return retval; -} - -/* - * Append a byte to string. - */ -void string_append_c(String *string,char c) -{ - if (string->len+1==string->alloc) - { - string->alloc*=2; - string->str=mem_renew(char,string->str,string->alloc); - } - string->str[string->len++]=c; - string->str[string->len]='\0'; -} - -/* - * Append len bytes from s to string. len may be passed as <0 if s is - * a nul-terminated string of unknown length. - */ -void string_append_len(String *string,const char *s,ssize_t len) -{ - if (len<0) - len=strlen(s); - if (string->len+len>=string->alloc) - { - while (string->len+len>=string->alloc) - string->alloc*=2; - string->str=mem_renew(char,string->str,string->alloc); - } - memcpy(string->str+string->len,s,len); - string->len+=len; - string->str[string->len]='\0'; -} - -/* - * Sets the length of a String. If the length is less than the current length, - * the string will be truncated. If the length is greater than the current - * length, the contents of the newly added area are undefined. (However, as - * always, string->str[string->len] will be a nul byte.) - */ -void string_set_size(String *string,size_t len) -{ - if (len>=string->alloc) - { - while (len>=string->alloc) - string->alloc*=2; - string->str=mem_renew(char,string->str,string->alloc); - } - string->len=len; - string->str[string->len]='\0'; -}