diff options
| -rw-r--r-- | CHANGES | 2 | ||||
| -rw-r--r-- | appl/cmd/9export.b | 1 | ||||
| -rw-r--r-- | appl/cmd/install/logs.b | 2 | ||||
| -rw-r--r-- | dis/9export.dis | bin | 3918 -> 3913 bytes | |||
| -rw-r--r-- | dis/install/logs.dis | bin | 3832 -> 3822 bytes | |||
| -rw-r--r-- | include/version.h | 2 | ||||
| -rw-r--r-- | lib9/fmtdef.h | 4 | ||||
| -rw-r--r-- | lib9/fmtprint.c | 6 | ||||
| -rw-r--r-- | lib9/fmtvprint.c | 9 | ||||
| -rw-r--r-- | lib9/runevseprint.c | 3 | ||||
| -rw-r--r-- | lib9/vfprint.c | 3 | ||||
| -rw-r--r-- | lib9/vseprint.c | 3 | ||||
| -rw-r--r-- | lib9/vsmprint.c | 15 | ||||
| -rw-r--r-- | lib9/vsnprint.c | 3 |
14 files changed, 36 insertions, 17 deletions
@@ -1,3 +1,5 @@ +20070608 + update /lib9 functions to use silly va_copy (and then va_end) instead of just assigning, to account for silly C implementations 20070607 /appl/wm/man.b /appl/lib/man.b to allow 10.1 etc as section references 20070605 diff --git a/appl/cmd/9export.b b/appl/cmd/9export.b index 5df1c8cf..1c430d88 100644 --- a/appl/cmd/9export.b +++ b/appl/cmd/9export.b @@ -38,7 +38,6 @@ init(nil: ref Draw->Context, args: list of string) arg->init(args); arg->setusage("9export [-aA9] [-k keyspec] [-e enc digest]"); - flags := 0; cryptalg := ""; # will be rc4_256 sha1 keyspec := ""; noauth := 0; diff --git a/appl/cmd/install/logs.b b/appl/cmd/install/logs.b index 20135622..35f43760 100644 --- a/appl/cmd/install/logs.b +++ b/appl/cmd/install/logs.b @@ -122,7 +122,7 @@ contents(e: ref Entry): string s := ""; for(cl := e.contents; cl != nil; cl = tl cl) s += " " + hd cl; - return s[1:]; + return s; # includes initial space } Entry.text(e: self ref Entry): string diff --git a/dis/9export.dis b/dis/9export.dis Binary files differindex 2faec210..112f5672 100644 --- a/dis/9export.dis +++ b/dis/9export.dis diff --git a/dis/install/logs.dis b/dis/install/logs.dis Binary files differindex 8bc3acc1..03ce48dc 100644 --- a/dis/install/logs.dis +++ b/dis/install/logs.dis diff --git a/include/version.h b/include/version.h index cf79cf6c..f208cc9d 100644 --- a/include/version.h +++ b/include/version.h @@ -1 +1 @@ -#define VERSION "Fourth Edition (20070607)" +#define VERSION "Fourth Edition (20070608)" diff --git a/lib9/fmtdef.h b/lib9/fmtdef.h index 071041cf..9b0e9782 100644 --- a/lib9/fmtdef.h +++ b/lib9/fmtdef.h @@ -96,3 +96,7 @@ void _fmtunlock(void); t += runetochar(t, &_rune);\ }\ }while(0) + +#ifndef va_copy +#define va_copy(a, b) ((a) = (b)) +#endif diff --git a/lib9/fmtprint.c b/lib9/fmtprint.c index c93cb315..549049a3 100644 --- a/lib9/fmtprint.c +++ b/lib9/fmtprint.c @@ -29,14 +29,16 @@ fmtprint(Fmt *f, char *fmt, ...) f->flags = 0; f->width = 0; f->prec = 0; - va = f->args; + va_copy(va, f->args); + va_end(f->args); va_start(f->args, fmt); n = dofmt(f, fmt); va_end(f->args); f->flags = 0; f->width = 0; f->prec = 0; - f->args = va; + va_copy(f->args, va); + va_end(va); if(n >= 0) return 0; return n; diff --git a/lib9/fmtvprint.c b/lib9/fmtvprint.c index 6682cd33..8e7c1f45 100644 --- a/lib9/fmtvprint.c +++ b/lib9/fmtvprint.c @@ -29,13 +29,16 @@ fmtvprint(Fmt *f, char *fmt, va_list args) f->flags = 0; f->width = 0; f->prec = 0; - va = f->args; - f->args = args; + va_copy(va, f->args); + va_end(f->args); + va_copy(f->args, args); n = dofmt(f, fmt); f->flags = 0; f->width = 0; f->prec = 0; - f->args = va; + va_end(f->args); + va_copy(f->args, va); + va_end(va); if(n >= 0) return 0; return n; diff --git a/lib9/runevseprint.c b/lib9/runevseprint.c index 46fdee60..2432b581 100644 --- a/lib9/runevseprint.c +++ b/lib9/runevseprint.c @@ -14,8 +14,9 @@ runevseprint(Rune *buf, Rune *e, char *fmt, va_list args) f.flush = nil; f.farg = nil; f.nfmt = 0; - f.args = args; + va_copy(f.args, args); dofmt(&f, fmt); + va_end(f.args); *(Rune*)f.to = '\0'; return f.to; } diff --git a/lib9/vfprint.c b/lib9/vfprint.c index eeea55d1..cd98bc13 100644 --- a/lib9/vfprint.c +++ b/lib9/vfprint.c @@ -38,8 +38,9 @@ vfprint(int fd, char *fmt, va_list args) int n; fmtfdinit(&f, fd, buf, sizeof(buf)); - f.args = args; + va_copy(f.args, args); n = dofmt(&f, fmt); + va_end(f.args); if(n > 0 && _fmtFdFlush(&f) == 0) return -1; return n; diff --git a/lib9/vseprint.c b/lib9/vseprint.c index 6f478960..b9675b35 100644 --- a/lib9/vseprint.c +++ b/lib9/vseprint.c @@ -27,8 +27,9 @@ vseprint(char *buf, char *e, char *fmt, va_list args) f.flush = nil; f.farg = nil; f.nfmt = 0; - f.args = args; + va_copy(f.args, args); dofmt(&f, fmt); + va_end(f.args); *(char*)f.to = '\0'; return f.to; } diff --git a/lib9/vsmprint.c b/lib9/vsmprint.c index 44789be5..0e18fe44 100644 --- a/lib9/vsmprint.c +++ b/lib9/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); } diff --git a/lib9/vsnprint.c b/lib9/vsnprint.c index 841d142c..3a5710cb 100644 --- a/lib9/vsnprint.c +++ b/lib9/vsnprint.c @@ -27,8 +27,9 @@ vsnprint(char *buf, int len, char *fmt, va_list args) f.flush = nil; f.farg = nil; f.nfmt = 0; - f.args = args; + va_copy(f.args, args); dofmt(&f, fmt); + va_end(f.args); *(char*)f.to = '\0'; return (char*)f.to - buf; } |
