aboutsummaryrefslogtreecommitdiff
path: root/src/base/string/makef.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/string/makef.c')
-rw-r--r--src/base/string/makef.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/base/string/makef.c b/src/base/string/makef.c
index 8fb9c38..1e0d917 100644
--- a/src/base/string/makef.c
+++ b/src/base/string/makef.c
@@ -1,25 +1,22 @@
#include "internal.h"
-// Newf returns a new dynamic string object
+// makef returns a new dynamic string object
string
-str·makef(const byte *fmt, ...)
+string·makef(byte *fmt, ...)
{
vlong n;
string s;
va_list args;
+ char bytes[256];
- va_start(args, fmt);
- n = vsnprintf(nil, 0, fmt, args);
- va_end(args);
-
- s = str·makecap(nil, 0, n);
+ s = string·makecap(nil, 0, arrlen(bytes));
va_start(args, fmt);
- vsnprintf(s, n + 1, fmt, args);
+ do{
+ n = fmt·vnsprint(bytes, arrlen(bytes), fmt, args);
+ string·append(&s, bytes);
+ }while(n==arrlen(bytes));
va_end(args);
- Hdr* h = (Hdr*)(s - sizeof(Hdr));
- h->len = n;
-
return s;
}