From a36577183430607196e88c2b951f2dc71a06dbaf Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sun, 22 May 2016 13:14:27 -0400 Subject: dstring: Clean up the API a bit. --- dstring.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'dstring.c') diff --git a/dstring.c b/dstring.c index 9c65757..5a6d4b3 100644 --- a/dstring.c +++ b/dstring.c @@ -75,23 +75,26 @@ int dstresize(char **dstr, size_t length) { return 0; } -int dstrcat(char **dest, const char *src) { - struct dstring *header = dstrheader(*dest); - return dstrcatat(dest, header->length, src); -} +static int dstrcat_impl(char **dest, const char *src, size_t srclen) { + size_t oldlen = dstrlen(*dest); + size_t newlen = oldlen + srclen; -int dstrcatat(char **dest, size_t pos, const char *src) { - size_t srclen = strlen(src); - size_t destlen = pos + srclen; - - if (dstresize(dest, destlen) != 0) { + if (dstresize(dest, newlen) != 0) { return -1; } - memcpy(*dest + pos, src, srclen); + memcpy(*dest + oldlen, src, srclen); return 0; } +int dstrcat(char **dest, const char *src) { + return dstrcat_impl(dest, src, strlen(src)); +} + +int dstrncat(char **dest, const char *src, size_t n) { + return dstrcat_impl(dest, src, strnlen(src, n)); +} + void dstrfree(char *dstr) { if (dstr) { free(dstrheader(dstr)); -- cgit v1.2.3