diff options
| author | Charles Forsyth <charles.forsyth@gmail.com> | 2014-06-30 10:57:08 +0100 |
|---|---|---|
| committer | Charles Forsyth <charles.forsyth@gmail.com> | 2014-06-30 10:57:08 +0100 |
| commit | 3cd4f1d15146c08f05206d6328ecbc1c7fdc8dfa (patch) | |
| tree | a546acadca10b43d6b5eafc6d85f4aed361e9988 /libkern/vsmprint.c | |
| parent | ee030d07b2cf167be70f1dc36f56bdf3012860ae (diff) | |
update to match lib9
Diffstat (limited to 'libkern/vsmprint.c')
| -rw-r--r-- | libkern/vsmprint.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/libkern/vsmprint.c b/libkern/vsmprint.c index 44789be5..0e18fe44 100644 --- a/libkern/vsmprint.c +++ b/libkern/vsmprint.c @@ -20,6 +20,8 @@ fmtStrFlush(Fmt *f) char *s; int n; + if(f->start == nil) + return 0; n = (int)f->farg; n += 256; f->farg = (void*)n; @@ -41,7 +43,7 @@ fmtstrinit(Fmt *f) { int n; - f->runes = 0; + memset(f, 0, sizeof(*f)); n = 32; f->start = malloc(n); if(f->start == nil) @@ -65,10 +67,13 @@ vsmprint(char *fmt, va_list args) if(fmtstrinit(&f) < 0) return nil; - f.args = args; + va_copy(f.args, args); n = dofmt(&f, fmt); - if(n < 0) + va_end(f.args); + if(n < 0){ + free(f.start); + f.start = nil; return nil; - *(char*)f.to = '\0'; - return f.start; + } + return fmtstrflush(&f); } |
