diff --git a/src/cfwstring.c b/src/cfwstring.c index 1c913ed..239b343 100644 --- a/src/cfwstring.c +++ b/src/cfwstring.c @@ -131,6 +131,23 @@ cfw_string_set(CFWString *str, const char *cstr) return true; } +bool +cfw_string_append(CFWString *str, CFWString *append) +{ + char *new; + + if ((new = realloc(str->cstr, str->len + append->len + 1)) == NULL) + return false; + + memcpy(new + str->len, append->cstr, append->len); + new[str->len + append->len] = 0; + + str->cstr = new; + str->len += append->len; + + return true; +} + static CFWClass class = { .name = "CFWString", .size = sizeof(CFWString), diff --git a/src/cfwstring.h b/src/cfwstring.h index 9424334..6572f28 100644 --- a/src/cfwstring.h +++ b/src/cfwstring.h @@ -34,5 +34,6 @@ extern CFWClass *cfw_string; extern const char* cfw_string_c(CFWString*); extern size_t cfw_string_len(CFWString*); extern bool cfw_string_set(CFWString*, const char*); +extern bool cfw_string_append(CFWString*, CFWString*); #endif diff --git a/tests/tests.c b/tests/tests.c index efcb511..6962553 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -38,13 +38,25 @@ main() size_t i; s[0] = cfw_new(cfw_string, "Hallo"); - s[1] = cfw_new(cfw_string, "Welt"); + s[1] = cfw_new(cfw_string, " Welt"); s[2] = cfw_new(cfw_string, "!"); a = cfw_new(cfw_array, s[0], s[1], s[2], NULL); + cfw_unref(s[0]); + cfw_unref(s[1]); + cfw_unref(s[2]); + + s[0] = cfw_new(cfw_string, NULL); + for (i = 0; i < cfw_array_size(a); i++) - puts(cfw_string_c(cfw_array_get(a, i))); + cfw_string_append(s[0], cfw_array_get(a, i)); + + cfw_unref(a); + + puts(cfw_string_c(s[0])); + + cfw_unref(s[0]); return 0; }