summaryrefslogtreecommitdiff
path: root/src/string-builder.c
blob: 0c53367a9ffdb86fcc8ac3168ba841179752088b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "string-builder.h"
#include <stdarg.h>
#include <stdio.h>

void
string_builder__append_ntimes (STRING_BUILDER sb, char c, size_t n)
{
  DYNAMIC_ARRAY__ENSURE_CAPACITY (*sb, n);
  memset (sb->items + sb->count, c, n);
  sb->count += n;
}

void
string_builder__append_cstrs (STRING_BUILDER sb, ...)
{
  va_list args;

  va_start (args, sb);
  const char *arg = va_arg (args, const char *);
  while (arg) {
    STRING_BUILDER__APPEND_CSTR(*sb, arg);
    arg = va_arg (args, const char *);
  } va_end (args);
}

void
string_builder__printf (STRING_BUILDER sb, const char *format, ...)
{
  va_list args;

  va_start (args, format);
  int size = vsnprintf (NULL, 0, format, args);
  va_end (args);
  ASSERT (size >= 0);

  DYNAMIC_ARRAY__ENSURE_CAPACITY (*sb, size + 1);
  va_start (args, format);
  vsnprintf (&sb->items[sb->count], size + 1, format, args);
  va_end (args);
  sb->count += size;
}