summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--appl/cmd/9export.b1
-rw-r--r--appl/cmd/install/logs.b2
-rw-r--r--dis/9export.disbin3918 -> 3913 bytes
-rw-r--r--dis/install/logs.disbin3832 -> 3822 bytes
-rw-r--r--include/version.h2
-rw-r--r--lib9/fmtdef.h4
-rw-r--r--lib9/fmtprint.c6
-rw-r--r--lib9/fmtvprint.c9
-rw-r--r--lib9/runevseprint.c3
-rw-r--r--lib9/vfprint.c3
-rw-r--r--lib9/vseprint.c3
-rw-r--r--lib9/vsmprint.c15
-rw-r--r--lib9/vsnprint.c3
14 files changed, 36 insertions, 17 deletions
diff --git a/CHANGES b/CHANGES
index 893c42e1..0695a858 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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
index 2faec210..112f5672 100644
--- a/dis/9export.dis
+++ b/dis/9export.dis
Binary files differ
diff --git a/dis/install/logs.dis b/dis/install/logs.dis
index 8bc3acc1..03ce48dc 100644
--- a/dis/install/logs.dis
+++ b/dis/install/logs.dis
Binary files differ
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;
}