FreeBSD tweaks
diff --git a/src/cmd/9yacc.c b/src/cmd/9yacc.c
index 6614414..3db6768 100644
--- a/src/cmd/9yacc.c
+++ b/src/cmd/9yacc.c
@@ -614,10 +614,13 @@
 void
 error(char *s, ...)
 {
+	va_list arg;
 
 	nerrors++;
 	fprint(2, "\n fatal error:");
-	fprint(2, s, (&s)[1]);
+	va_start(arg, s);
+	vfprint(2, s, arg);
+	va_end(arg);
 	fprint(2, ", %s:%d\n", infile, lineno);
 	if(!fatfl)
 		return;
@@ -2629,7 +2632,7 @@
 		case '$':
 			break;
 		default:
-			error("bad tempfile");
+			error("bad tempfile %s", tempname);
 		}
 		break;
 	}
diff --git a/src/cmd/acid/main.c b/src/cmd/acid/main.c
index 0d1909c..f1372f8 100644
--- a/src/cmd/acid/main.c
+++ b/src/cmd/acid/main.c
@@ -52,7 +52,7 @@
 void
 main(int argc, char *argv[])
 {
-	Lsym *l;
+	Lsym *volatile l;
 	Node *n;
 	char buf[128], *s;
 	int pid, i;
@@ -173,7 +173,8 @@
 static int
 attachfiles(int argc, char **argv)
 {
-	int fd, pid;
+	int fd;
+	volatile int pid;
 	char *s;
 	int i, omode;
 	Fhdr *hdr;
diff --git a/src/cmd/acidtypes/stabs.c b/src/cmd/acidtypes/stabs.c
index 90bd1de..bd6e718 100644
--- a/src/cmd/acidtypes/stabs.c
+++ b/src/cmd/acidtypes/stabs.c
@@ -600,8 +600,9 @@
 int
 stabs2acid(Stab *stabs, Biobuf *b)
 {
-	int fno, i;
-	char c, *dir, *fn, *file, *name, *desc, *p;
+	volatile int fno, i;
+	char c, *file, *desc, *p;
+	char *volatile dir, *volatile fn, *volatile name;
 	Ftypes *f;
 	Type *t, *tt;
 	StabSym sym;
diff --git a/src/cmd/auxstats/FreeBSD.c b/src/cmd/auxstats/FreeBSD.c
index b0379f8..d881ad8 100644
--- a/src/cmd/auxstats/FreeBSD.c
+++ b/src/cmd/auxstats/FreeBSD.c
@@ -88,7 +88,6 @@
 	struct ifnet ifnet;
 	struct ifnethead ifnethead;
 	char name[16];
-	int n;
 
 	if(first)
 		return;
diff --git a/src/cmd/draw/tweak.c b/src/cmd/draw/tweak.c
index 82a22ee..6d8ee26 100644
--- a/src/cmd/draw/tweak.c
+++ b/src/cmd/draw/tweak.c
@@ -179,9 +179,9 @@
 }
 
 void
-main(int argc, char *argv[])
+main(volatile int argc, char **volatile argv)
 {
-	int i;
+	volatile int i;
 	Event e;
 	Thing *t;
 
@@ -575,7 +575,7 @@
 	Image *b;
 	Subfont *s;
 	Thing *t;
-	Dir *d;
+	Dir *volatile d;
 	jmp_buf oerr;
 	uchar buf[256];
 	char *data;
diff --git a/src/cmd/gzip/unzip.c b/src/cmd/gzip/unzip.c
index 2f7888d..70e10a1 100644
--- a/src/cmd/gzip/unzip.c
+++ b/src/cmd/gzip/unzip.c
@@ -135,7 +135,7 @@
 unztable(Biobuf *bin, char *file)
 {
 	ZipHead zh;
-	int entries;
+	int volatile entries;
 
 	entries = findCDir(bin, file);
 	if(entries < 0)
@@ -273,7 +273,7 @@
 {
 	ZipHead zh;
 	vlong off;
-	int ok, eok, entries;
+	int volatile ok, eok, entries;
 
 	entries = findCDir(bin, file);
 	if(entries < 0)
diff --git a/src/cmd/gzip/zip.c b/src/cmd/gzip/zip.c
index 0e0d6ba..63903ec 100644
--- a/src/cmd/gzip/zip.c
+++ b/src/cmd/gzip/zip.c
@@ -45,9 +45,9 @@
 }
 
 void
-main(int argc, char *argv[])
+main(int volatile argc, char **volatile argv)
 {
-	char *zfile;
+	char *volatile zfile;
 	int i, fd, err;
 
 	zfile = nil;
diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c
index 6d1d9d1..a05fe61 100644
--- a/src/cmd/plumb/plumber.c
+++ b/src/cmd/plumb/plumber.c
@@ -29,7 +29,8 @@
 threadmain(int argc, char *argv[])
 {
 	char buf[512];
-	int fd, dofork;
+	int fd;
+	int volatile dofork;
 
 	progname = "plumber";
 	dofork = 1;
diff --git a/src/cmd/rc/unixcrap.c b/src/cmd/rc/unixcrap.c
index 57da10e..3a4dd2c 100644
--- a/src/cmd/rc/unixcrap.c
+++ b/src/cmd/rc/unixcrap.c
@@ -1,5 +1,6 @@
 #include <u.h>
 #include <sys/time.h>
+#include <sys/stat.h>
 #include <sys/resource.h>
 #include <libc.h>
 #include "rc.h"
@@ -174,10 +175,7 @@
 		n = strtol(argv[0], &p, 8);
 		if(*p != 0 || p == argv[0])
 			goto usage;
-		if(umask(n) < 0){
-			fprint(mapfd(2), "umask: %r\n");
-			goto out;
-		}
+		umask(n);
 		goto out;
 	}
 
diff --git a/src/cmd/sam/sam.c b/src/cmd/sam/sam.c
index 803b84e..b5b16a1 100644
--- a/src/cmd/sam/sam.c
+++ b/src/cmd/sam/sam.c
@@ -38,9 +38,9 @@
 extern int notify(void(*)(void*,char*));
 
 int
-main(int argc, char *argv[])
+main(int volatile argc, char **volatile argv)
 {
-	int i;
+	int volatile i;
 	String *t;
 	char **ap, **arg;
 
diff --git a/src/cmd/sam/shell.c b/src/cmd/sam/shell.c
index 2cac31b..ee30e5d 100644
--- a/src/cmd/sam/shell.c
+++ b/src/cmd/sam/shell.c
@@ -13,7 +13,8 @@
 {
 	long l;
 	int m;
-	int pid, fd;
+	int volatile pid;
+	int fd;
 	int retcode;
 	int pipe1[2], pipe2[2];