str_buf * str_buf_concat(str_buf * buf1, str_buf * buf2) { str_buf * buf; if ( buf1 == NULL ) { if ( buf2 == NULL ) buf = str_buf_alloc(0); else buf = str_buf_alloc_substr(buf2->data, buf2->length); } else if ( buf2 == NULL ) { buf = str_buf_alloc_substr(buf1->data, buf1->length); } else { buf = str_buf_alloc( buf1->length + buf2->length ); if ( buf == NULL ) return NULL ; strcpy(buf->data, buf1->data); strcpy(buf->data + buf1->length, buf2->data); buf->length = buf->size; } return buf; }
void test_str_buf_alloc_substr(){ str_buf *b1; str_buf *b2; b1 = str_buf_alloc_substr("abcdef",4); b2 = str_buf_alloc_substr("abcdef",4); assert(strcmp(str_buf_head(b1) , "abcd")==0); assert(str_buf_equals(b1,b2)); assert(str_buf_len(b1)==4); str_buf_free(b1); str_buf_free(b2); }
str_buf * str_buf_alloc_str(const char * str) { return str_buf_alloc_substr( str, strlen(str) ); }