diff -r d45cfe9072cd sys/src/libc/fmt/vsnprint.c --- a/sys/src/libc/fmt/vsnprint.c Sat May 30 13:03:05 2020 +0200 +++ b/sys/src/libc/fmt/vsnprint.c Sat May 30 14:31:13 2020 -0700 @@ -2,19 +2,27 @@ #include int +fmtbufinit(Fmt *f, char *buf, int len) +{ + if(len <= 0) + return -1; + f->runes = 0; + f->start = buf; + f->to = buf; + f->stop = buf + len - 1; + f->flush = nil; + f->farg = nil; + f->nfmt = 0; + return 0; +} + +int vsnprint(char *buf, int len, char *fmt, va_list args) { Fmt f; - if(len <= 0) + if(fmtbufinit(&f, buf, len) == -1) return -1; - f.runes = 0; - f.start = buf; - f.to = buf; - f.stop = buf + len - 1; - f.flush = nil; - f.farg = nil; - f.nfmt = 0; f.args = args; dofmt(&f, fmt); *(char*)f.to = '\0';