diff options
Diffstat (limited to 'src/dstring.c')
-rw-r--r-- | src/dstring.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/dstring.c b/src/dstring.c index 86ab646..af499fd 100644 --- a/src/dstring.c +++ b/src/dstring.c @@ -1,11 +1,12 @@ // Copyright © Tavian Barnes <tavianator@tavianator.com> // SPDX-License-Identifier: 0BSD -#include "prelude.h" #include "dstring.h" + #include "alloc.h" #include "bit.h" #include "diag.h" + #include <stdarg.h> #include <stddef.h> #include <stdint.h> @@ -277,3 +278,20 @@ void dstrfree(dchar *dstr) { free(dstrheader(dstr)); } } + +dchar *dstrepeat(const char *str, size_t n) { + size_t len = strlen(str); + dchar *ret = dstralloc(n * len); + if (!ret) { + return NULL; + } + + for (size_t i = 0; i < n; ++i) { + if (dstrxcat(&ret, str, len) < 0) { + dstrfree(ret); + return NULL; + } + } + + return ret; +} |