aboutsummaryrefslogtreecommitdiff
path: root/src/base/string/makef.c
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2021-12-05 09:47:21 -0800
committerNicholas Noll <nbnoll@eml.cc>2021-12-05 10:54:20 -0800
commit521d01e8ad87e931af3e9a763cc84a6cf7fe5ee3 (patch)
treef544119060c3eefc7b0fec6cff1740a362541213 /src/base/string/makef.c
parent158d9b84f14457136379f42e7c071eb79d87ee6b (diff)
Feat: basic string and memory functions
Continue filling out the basic standard lib functions. Included prototypes of the str* and mem* families. Plan to add e(str|mem) and n(str|mem) variants as well.
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;
}