summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLibravatar Martin Michalec <martin@michalec.dev>2026-02-21 23:56:50 +0000
committerLibravatar Martin Michalec <martin@michalec.dev>2026-02-22 03:20:29 +0000
commit8efdd3d26969db25ec113e94c5d2bb66373efaa0 (patch)
tree07a75298484291e3fe1e3439ae3c4d517e098eb1 /src
downloadstring-builder-8efdd3d26969db25ec113e94c5d2bb66373efaa0.tar.gz
add implementationHEADmaster
Diffstat (limited to 'src')
-rw-r--r--src/string-builder.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/string-builder.c b/src/string-builder.c
new file mode 100644
index 0000000..0c53367
--- /dev/null
+++ b/src/string-builder.c
@@ -0,0 +1,41 @@
1#include "string-builder.h"
2#include <stdarg.h>
3#include <stdio.h>
4
5void
6string_builder__append_ntimes (STRING_BUILDER sb, char c, size_t n)
7{
8 DYNAMIC_ARRAY__ENSURE_CAPACITY (*sb, n);
9 memset (sb->items + sb->count, c, n);
10 sb->count += n;
11}
12
13void
14string_builder__append_cstrs (STRING_BUILDER sb, ...)
15{
16 va_list args;
17
18 va_start (args, sb);
19 const char *arg = va_arg (args, const char *);
20 while (arg) {
21 STRING_BUILDER__APPEND_CSTR(*sb, arg);
22 arg = va_arg (args, const char *);
23 } va_end (args);
24}
25
26void
27string_builder__printf (STRING_BUILDER sb, const char *format, ...)
28{
29 va_list args;
30
31 va_start (args, format);
32 int size = vsnprintf (NULL, 0, format, args);
33 va_end (args);
34 ASSERT (size >= 0);
35
36 DYNAMIC_ARRAY__ENSURE_CAPACITY (*sb, size + 1);
37 va_start (args, format);
38 vsnprintf (&sb->items[sb->count], size + 1, format, args);
39 va_end (args);
40 sb->count += size;
41}