blob: 4b8d76cccf164e944ee78efb58ef4d195d198907 (
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
|
#include "internal.h"
/*
* appendf will append the given formatted string to our buffer.
* returns the newly minted string
*/
int
str·appendf(string *s, const byte* fmt, ...)
{
va_list args;
va_start(args, fmt);
int remain = str·cap(*s) - str·len(*s);
int n = vsnprintf(*s + str·len(*s), remain + 1, fmt, args);
va_end(args);
if(n > remain){
// If the first write was incomplete, we overwite the data again.
str·grow(s, n);
va_list args;
va_start(args, fmt);
n = vsnprintf(*s + str·len(*s), n + 1, fmt, args);
assert(n - remain <= str·cap(*s));
va_end(args);
}
Hdr* h = (Hdr*)(*s - sizeof(Hdr));
h->len += n;
return n;
}
|