Browse Source

revert the string function treatment: it broke at least errfmt.

Change-Id: If14a1a0e155225f153e36816ffc8740b023967c1
Aki Nyrhinen 8 years ago
parent
commit
5f6cee0597
81 changed files with 190 additions and 326 deletions
  1. 1 0
      sys/include/control.h
  2. 21 21
      sys/include/libc.h
  3. 1 1
      sys/src/cmd/9nfs/rpc.h
  4. 3 3
      sys/src/cmd/cb/cb.c
  5. 1 1
      sys/src/cmd/disk/mkext.c
  6. 2 2
      sys/src/cmd/disk/mkfs.c
  7. 1 1
      sys/src/cmd/dossrv/dossubs.c
  8. 1 1
      sys/src/cmd/dossrv/fns.h
  9. 4 4
      sys/src/cmd/file.c
  10. 3 3
      sys/src/cmd/gview.c
  11. 4 4
      sys/src/cmd/hget.c
  12. 1 1
      sys/src/cmd/html2ms.c
  13. 3 3
      sys/src/cmd/ip/imap4d/fns.h
  14. 2 4
      sys/src/lib9p/parse.c
  15. 2 4
      sys/src/libauth/auth_challenge.c
  16. 2 4
      sys/src/libauth/auth_getuserpasswd.c
  17. 3 4
      sys/src/libauth/auth_proxy.c
  18. 2 4
      sys/src/libauth/auth_respond.c
  19. 1 4
      sys/src/libauth/auth_wep.c
  20. 2 4
      sys/src/libbio/bprint.c
  21. 3 8
      sys/src/libc/9sys/sysfatal.c
  22. 2 4
      sys/src/libc/9sys/syslog.c
  23. 2 4
      sys/src/libc/9sys/werrstr.c
  24. 2 4
      sys/src/libc/fmt/fmtprint.c
  25. 2 4
      sys/src/libc/fmt/fprint.c
  26. 2 4
      sys/src/libc/fmt/print.c
  27. 2 4
      sys/src/libc/fmt/runeseprint.c
  28. 2 4
      sys/src/libc/fmt/runesmprint.c
  29. 2 4
      sys/src/libc/fmt/runesnprint.c
  30. 2 4
      sys/src/libc/fmt/runesprint.c
  31. 2 4
      sys/src/libc/fmt/seprint.c
  32. 2 4
      sys/src/libc/fmt/smprint.c
  33. 2 4
      sys/src/libc/fmt/snprint.c
  34. 2 4
      sys/src/libc/fmt/sprint.c
  35. 1 1
      sys/src/libc/port/cistrcmp.c
  36. 1 1
      sys/src/libc/port/cistrncmp.c
  37. 3 3
      sys/src/libc/port/cistrstr.c
  38. 4 8
      sys/src/libc/port/malloc.c
  39. 2 3
      sys/src/libc/port/memccpy.c
  40. 3 3
      sys/src/libc/port/pool.c
  41. 1 1
      sys/src/libc/port/strcat.c
  42. 3 3
      sys/src/libc/port/strchr.c
  43. 1 1
      sys/src/libc/port/strcmp.c
  44. 1 1
      sys/src/libc/port/strcpy.c
  45. 2 3
      sys/src/libc/port/strcspn.c
  46. 1 1
      sys/src/libc/port/strdup.c
  47. 1 1
      sys/src/libc/port/strlen.c
  48. 1 1
      sys/src/libc/port/strncat.c
  49. 1 1
      sys/src/libc/port/strncmp.c
  50. 1 1
      sys/src/libc/port/strncpy.c
  51. 1 1
      sys/src/libc/port/strpbrk.c
  52. 3 3
      sys/src/libc/port/strrchr.c
  53. 2 3
      sys/src/libc/port/strspn.c
  54. 3 4
      sys/src/libc/port/strstr.c
  55. 1 1
      sys/src/libc/port/strtok.c
  56. 7 15
      sys/src/libcontrol/control.c
  57. 1 3
      sys/src/libdisk/proto.c
  58. 2 4
      sys/src/libhttpd/fail.c
  59. 2 4
      sys/src/libhttpd/hio.c
  60. 1 3
      sys/src/libmemdraw/arctest.c
  61. 1 3
      sys/src/libmemdraw/drawtest.c
  62. 2 4
      sys/src/liboventi/debug.c
  63. 2 4
      sys/src/liboventi/fatal.c
  64. 2 4
      sys/src/liboventi/plan9-thread.c
  65. 2 4
      sys/src/libsec/port/tlshand.c
  66. 2 4
      sys/src/libstdio/fprintf.c
  67. 2 4
      sys/src/libstdio/fscanf.c
  68. 2 4
      sys/src/libstdio/printf.c
  69. 2 4
      sys/src/libstdio/scanf.c
  70. 2 4
      sys/src/libstdio/snprintf.c
  71. 2 4
      sys/src/libstdio/sprintf.c
  72. 2 4
      sys/src/libstdio/sscanf.c
  73. 6 9
      sys/src/libstdio/vfprintf.c
  74. 3 8
      sys/src/libstdio/vfscanf.c
  75. 2 4
      sys/src/libthread/debug.c
  76. 1 21
      sys/src/libthread/exec.c
  77. 2 4
      sys/src/libthread/id.c
  78. 2 4
      sys/src/libthread/iocall.c
  79. 2 4
      sys/src/libthread/lib.c
  80. 2 4
      sys/src/libventi/debug.c
  81. 8 14
      sys/src/libventi/log.c

+ 1 - 0
sys/include/control.h

@@ -218,4 +218,5 @@ Control*	createtextbutton3(Controlset*, char*);
 void		resizecontrolset(Controlset*);
 
 int		_ctlsnarffd;
+char		*alignnames[];
 int		ctldeletequits;

+ 21 - 21
sys/include/libc.h

@@ -17,7 +17,7 @@
 /*
  * mem routines
  */
-extern	void*	memccpy(void*, const void*, int, uint32_t);
+extern	void*	memccpy(void*, void*, int, uint32_t);
 extern	void*	memset(void*, int, uint32_t);
 extern	int	memcmp(const void*, const void*, uint32_t);
 extern	void*	memcpy(void*, const void*, size_t);
@@ -27,25 +27,25 @@ extern	void*	memchr(const void*, int, uint32_t);
 /*
  * string routines
  */
-extern	char*	strcat(char*, const char*);
-extern	char*	strchr(const char*, int);
-extern	int	strcmp(const char*, const char*);
-extern	char*	strcpy(char*, const char*);
+extern	char*	strcat(char*, char*);
+extern	char*	strchr(char*, int);
+extern	int	strcmp(char*, char*);
+extern	char*	strcpy(char*, char*);
 extern	char*	strecpy(char*, char*, char*);
-extern	char*	strdup(const char*);
-extern	char*	strncat(char*, const char*, int32_t);
-extern	char*	strncpy(char*, const char*, uint32_t);
-extern	int	strncmp(const char*, const char*, int32_t);
-extern	char*	strpbrk(const char*, const char*);
-extern	char*	strrchr(const char*, int);
-extern	char*	strtok(char*, const char*);
-extern	int32_t	strlen(const char*);
-extern	int32_t	strspn(const char*, const char*);
-extern	int32_t	strcspn(const char*, const char*);
-extern	char*	strstr(const char*, const char*);
-extern	int	cistrncmp(const char*, const char*, int);
-extern	int	cistrcmp(const char*, const char*);
-extern	char*	cistrstr(const char*, const char*);
+extern	char*	strdup(char*);
+extern	char*	strncat(char*, char*, int32_t);
+extern	char*	strncpy(char*, char*, uint32_t);
+extern	int	strncmp(char*, char*, int32_t);
+extern	char*	strpbrk(char*, char*);
+extern	char*	strrchr(char*, int);
+extern	char*	strtok(char*, char*);
+extern	int32_t	strlen(char*);
+extern	int32_t	strspn(char*, char*);
+extern	int32_t	strcspn(char*, char*);
+extern	char*	strstr(char*, char*);
+extern	int	cistrncmp(char*, char*, int);
+extern	int	cistrcmp(char*, char*);
+extern	char*	cistrstr(char*, char*);
 extern	int	tokenize(char*, char**, int);
 
 enum
@@ -665,7 +665,7 @@ extern	int	bind(char*, char*, int);
 extern	int	brk(void*);
 extern	int	chdir(char*);
 extern	int	close(int);
-extern	int	create(const char*, int, uint32_t);
+extern	int	create(char*, int, uint32_t);
 extern	int	dup(int, int);
 extern	int	errstr(char*, uint);
 extern	int	exec(char*, char*[]);
@@ -680,7 +680,7 @@ extern	int	mount(int, int, char*, int, char*);
 extern	int	unmount(char*, char*);
 extern	int	noted(int);
 extern	int	notify(void(*)(void*, char*));
-extern	int	open(const char*, int);
+extern	int	open(char*, int);
 extern	int	fd2path(int, char*, int);
 // extern	int	fdflush(int);
 extern	int	pipe(int*);

+ 1 - 1
sys/src/cmd/9nfs/rpc.h

@@ -84,7 +84,7 @@ enum
 
 #define	ROUNDUP(n)	((n) + ((-(n))&3))
 
-#define	PLONG(x)	(dataptr[3] = ((uint8_t)(x)), dataptr[2] = ((uint8_t)(x))>>8, dataptr[1] = ((uint8_t)(x))>>16, dataptr[0] = ((uint8_t)(x))>>24, dataptr += 4)
+#define	PLONG(x)	(dataptr[3] = ((uint32_t)(x)), dataptr[2] = ((uint32_t)(x))>>8, dataptr[1] = ((uint32_t)(x))>>16, dataptr[0] = ((uint32_t)(x))>>24, dataptr += 4)
 #define	PPTR(x, n)	(memmove(dataptr, (x), n), dataptr += ROUNDUP(n))
 #define	PBYTE(x)	(*dataptr++ = (x))
 

+ 3 - 3
sys/src/cmd/cb/cb.c

@@ -699,7 +699,7 @@ gotop(int c)
 	char *a, *b;
 	op_ptr = optmp;
 	*op_ptr++ = c;
-	while (isop((int)( *op_ptr = getch())))op_ptr++;
+	while (isop(( *op_ptr = getch())))op_ptr++;
 	if(!strict)unget(*op_ptr);
 	else if (*op_ptr != ' ')unget( *op_ptr);
 	*op_ptr = '\0';
@@ -859,7 +859,7 @@ lookup(char *first, char *last)
 	ptr = key;
 	while ((ckey = ptr->name) != 0){
 		for (k = cptr; (*ckey == *k && *ckey != '\0'); k++, ckey++);
-		if(*ckey=='\0' && (k==last|| (k<last && !isalnum((int)*k)))){
+		if(*ckey=='\0' && (k==last|| (k<last && !isalnum(*k)))){
 			opflag = 1;
 			lastlook = 0;
 			return(ptr);
@@ -969,7 +969,7 @@ getnext(int must){
 	}
 	tp = lastplace;
 	if(inswitch && tptr <= lastplace)
-		if (isalnum((int)*lastplace)||ispunct((int)*lastplace)||isop((int)*lastplace))return(lastplace);
+		if (isalnum(*lastplace)||ispunct(*lastplace)||isop(*lastplace))return(lastplace);
 space:
 	while(isspace(c=Bgetc(input)))puttmp(c,1);
 	beg = tp;

+ 1 - 1
sys/src/cmd/disk/mkext.c

@@ -30,7 +30,7 @@ void	usage(void);
 
 Biobufhdr bin;
 unsigned char	binbuf[2*LEN];
-char	linebuf[LEN];
+int8_t	linebuf[LEN];
 int	uflag;
 int	hflag;
 int	vflag;

+ 2 - 2
sys/src/cmd/disk/mkfs.c

@@ -56,7 +56,7 @@ void	printfile(File*);
 void	setnames(File*);
 void	setusers(void);
 void	skipdir(void);
-char*	strdup(const char*);
+char*	strdup(char*);
 int	uptodate(Dir*, char*);
 void	usage(void);
 void	warn(char *, ...);
@@ -500,7 +500,7 @@ mkpath(char *prefix, char *elem)
 }
 
 char *
-strdup(const char *s)
+strdup(char *s)
 {
 	char *t;
 

+ 1 - 1
sys/src/cmd/dossrv/dossubs.c

@@ -1908,7 +1908,7 @@ dirdump(void *vdbuf)
 }
 
 int
-cistrcmp(const char *s1, const char *s2)
+cistrcmp(char *s1, char *s2)
 {
 	int c1, c2;
 

+ 1 - 1
sys/src/cmd/dossrv/fns.h

@@ -14,7 +14,7 @@ void	bootsecdump32(int fd, Xfs *xf, Dosboot32 *b32);
 int	cfalloc(Xfile*);
 void	chat(char*, ...);
 #pragma	varargck	argpos	chat	1
-int	cistrcmp(const char*, const char*);
+int	cistrcmp(char*, char*);
 int	classifyname(char*);
 Xfile	*clean(Xfile*);
 int32_t	clust2sect(Dosbpb*, int32_t);

+ 4 - 4
sys/src/cmd/file.c

@@ -147,7 +147,7 @@ enum
 } guess;
 
 void	bump_utf_count(Rune);
-int	cistrncmp(const char*, const char*, int);
+int	cistrncmp(char*, char*, int);
 void	filetype(int);
 int	getfontnum(uint8_t*, uint8_t**);
 int	isas(void);
@@ -1157,17 +1157,17 @@ isenglish(void)
 
 	vow = 0;
 	for(p="AEIOU"; *p; p++) {
-		vow += cfreq[(int)*p];
+		vow += cfreq[*p];
 		vow += cfreq[tolower(*p)];
 	}
 	comm = 0;
 	for(p="ETAION"; *p; p++) {
-		comm += cfreq[(int)*p];
+		comm += cfreq[*p];
 		comm += cfreq[tolower(*p)];
 	}
 	rare = 0;
 	for(p="VJKQXZ"; *p; p++) {
-		rare += cfreq[(int)*p];
+		rare += cfreq[*p];
 		rare += cfreq[tolower(*p)];
 	}
 	if(vow*5 >= nbuf-cfreq[' '] && comm >= 10*rare) {

+ 3 - 3
sys/src/cmd/gview.c

@@ -302,7 +302,7 @@ thick_color* parse_color_chars(const char* c0, const char* fin,
 			if (++c==fin)
 				return tc_default(tc);
 			else tc[i].thick=1;
-		j = (*c&~127) ? -1 : nam1_idx[(int)*c];
+		j = (*c&~127) ? -1 : nam1_idx[*c];
 		if (j < 0)
 			return tc_default(tc);
 		tc[i].clr = clrtab[j].im;
@@ -561,7 +561,7 @@ transform cur_trans(void)
 }
 
 
-double u_slant_amt(const fpolygons *u)
+double u_slant_amt(fpolygons *u)
 {
 	double sh=u->slant_ht, dy=u->disp.max.y - u->disp.min.y;
 	double dx = u->disp.max.x - u->disp.min.x;
@@ -572,7 +572,7 @@ double u_slant_amt(const fpolygons *u)
 /* Set *y0 and *y1 to the lower and upper bounds of the set of y-sl*x values that
    *u says to display, where sl is the amount of slant.
 */
-double set_unslanted_y(const fpolygons *u, double *y0, double *y1)
+double set_unslanted_y(fpolygons *u, double *y0, double *y1)
 {
 	double yy1, sl=u_slant_amt(u);
 	if (u->slant_ht > 0) {

+ 4 - 4
sys/src/cmd/hget.c

@@ -74,8 +74,8 @@ Range*	crackrange(char*);
 int	getheader(int, char*, int);
 int	httpheaders(int, int, URL*, Range*);
 int	httprcode(int);
-int	cistrncmp(const char*, const char*, int);
-int	cistrcmp(const char*, const char*);
+int	cistrncmp(char*, char*, int);
+int	cistrcmp(char*, char*);
 void	initibuf(void);
 int	readline(int, char*, int);
 int	readibuf(int, char*, int);
@@ -1249,7 +1249,7 @@ terminateftp(int ctl, int rv)
  * case insensitive strcmp (why aren't these in libc?)
  */
 int
-cistrncmp(const char *a, const char *b, int n)
+cistrncmp(char *a, char *b, int n)
 {
 	while(n-- > 0){
 		if(tolower(*a++) != tolower(*b++))
@@ -1259,7 +1259,7 @@ cistrncmp(const char *a, const char *b, int n)
 }
 
 int
-cistrcmp(const char *a, const char *b)
+cistrcmp(char *a, char *b)
 {
 	while(*a || *b)
 		if(tolower(*a++) != tolower(*b++))

+ 1 - 1
sys/src/cmd/html2ms.c

@@ -167,7 +167,7 @@ Entity pl_entity[]=
 };
 
 int
-cistrcmp(const char *a, const char *b)
+cistrcmp(char *a, char *b)
 {
 	int c, d;
 

+ 3 - 3
sys/src/cmd/ip/imap4d/fns.h

@@ -28,9 +28,9 @@ int	cdOpen(char *dir, char *file, int mode);
 int	cdRemove(char *dir, char *file);
 MbLock	*checkBox(Box *box, int imped);
 int	ciisprefix(char *pre, char *s);
-int	cistrcmp(const char*, const char*);
-int	cistrncmp(const char*, const char*, int);
-char	*cistrstr(const char *s, const char *sub);
+int	cistrcmp(char*, char*);
+int	cistrncmp(char*, char*, int);
+char	*cistrstr(char *s, char *sub);
 void	closeBox(Box *box, int opened);
 void	closeImp(Box *box, MbLock *ml);
 int	copyBox(char *from, char *to, int doremove);

+ 2 - 4
sys/src/lib9p/parse.c

@@ -76,14 +76,12 @@ void
 respondcmderror(Req *r, Cmdbuf *cb, char *fmt, ...)
 {
 	int i;
-	va_list va, arg;
+	va_list arg;
 	char *p, *e;
 	char err[ERRMAX];
 	
 	e = err+ERRMAX-10;
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = vseprint(err, e, fmt, arg);
 	va_end(arg);
 	p = seprint(p, e, ": \"");

+ 2 - 4
sys/src/libauth/auth_challenge.c

@@ -17,13 +17,11 @@ Chalstate*
 auth_challenge(char *fmt, ...)
 {
 	char *p;
-	va_list va, arg;
+	va_list arg;
 	Chalstate *c;
 
 	quotefmtinstall();	/* just in case */
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = vsmprint(fmt, arg);
 	va_end(arg);
 	if(p == nil)

+ 2 - 4
sys/src/libauth/auth_getuserpasswd.c

@@ -37,7 +37,7 @@ auth_getuserpasswd(AuthGetkey *getkey, char *fmt, ...)
 	AuthRpc *rpc;
 	char *f[3], *p, *params;
 	int fd;
-	va_list va, arg;
+	va_list arg;
 	UserPasswd *up;
 
 	up = nil;
@@ -51,9 +51,7 @@ auth_getuserpasswd(AuthGetkey *getkey, char *fmt, ...)
 	if(rpc == nil)
 		goto out;
 	quotefmtinstall();	/* just in case */
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	params = vsmprint(fmt, arg);
 	va_end(arg);
 	if(params == nil)

+ 3 - 4
sys/src/libauth/auth_proxy.c

@@ -197,14 +197,13 @@ auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...)
 {
 	int afd;
 	char *p;
-	va_list va, arg;
+	va_list arg;
 	AuthInfo *ai;
 	AuthRpc *rpc;
 
 	quotefmtinstall();	/* just in case */
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);	p = vsmprint(fmt, arg);
+	va_start(arg, fmt);
+	p = vsmprint(fmt, arg);
 	va_end(arg);
 
 	ai = nil;

+ 2 - 4
sys/src/libauth/auth_respond.c

@@ -37,7 +37,7 @@ auth_respond(void *chal, uint nchal, char *user, uint nuser, void *resp,
 	     uint nresp, AuthGetkey *getkey, char *fmt, ...)
 {
 	char *p, *s;
-	va_list va, arg;
+	va_list arg;
 	int afd;
 	AuthRpc *rpc;
 	Attr *a;
@@ -51,9 +51,7 @@ auth_respond(void *chal, uint nchal, char *user, uint nuser, void *resp,
 	}
 
 	quotefmtinstall();	/* just in case */
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = vsmprint(fmt, arg);
 	va_end(arg);
 

+ 1 - 4
sys/src/libauth/auth_wep.c

@@ -21,7 +21,7 @@ auth_wep(char *dev, char *fmt, ...)
 	AuthRpc *rpc;
 	char *params, *p;
 	int fd;
-	va_list va, arg;
+	va_list arg;
 	int rv;
 
 	rv = -1;
@@ -38,9 +38,6 @@ auth_wep(char *dev, char *fmt, ...)
 	rpc = auth_allocrpc(fd);
 	if(rpc != nil){
 		quotefmtinstall();	/* just in case */
-		va_start(va, fmt);
-		va_copy(arg, va);
-		va_end(va);
 		va_start(arg, fmt);
 		params = vsmprint(fmt, arg);
 		va_end(arg);

+ 2 - 4
sys/src/libbio/bprint.c

@@ -14,12 +14,10 @@
 int
 Bprint(Biobufhdr *bp, char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 	int n;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	n = Bvprint(bp, fmt, arg);
 	va_end(arg);
 	return n;

+ 3 - 8
sys/src/libc/9sys/sysfatal.c

@@ -15,11 +15,8 @@ static void
 _sysfatalimpl(char *fmt, va_list arg)
 {
 	char buf[1024];
-	va_list va;
 
-	va_copy(arg, va);
-
-	vseprint(buf, buf+sizeof(buf), fmt, va);
+	vseprint(buf, buf+sizeof(buf), fmt, arg);
 	if(argv0)
 		fprint(2, "%s: %s\n", argv0, buf);
 	else
@@ -32,11 +29,9 @@ void (*_sysfatal)(char *fmt, va_list arg) = _sysfatalimpl;
 void
 sysfatal(char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	(*_sysfatal)(fmt, arg);
 	va_end(arg);
 }

+ 2 - 4
sys/src/libc/9sys/syslog.c

@@ -53,7 +53,7 @@ syslog(int cons, char *logname, char *fmt, ...)
 {
 	char buf[1024];
 	char *ctim, *p;
-	va_list va, arg;
+	va_list arg;
 	int n;
 	Dir *d;
 	char err[ERRMAX];
@@ -107,9 +107,7 @@ syslog(int cons, char *logname, char *fmt, ...)
 	p += 15;
 	*p++ = ' ';
 	errstr(err, sizeof err);
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = vseprint(p, buf+sizeof(buf)-1, fmt, arg);
 	va_end(arg);
 	*p++ = '\n';

+ 2 - 4
sys/src/libc/9sys/werrstr.c

@@ -13,12 +13,10 @@
 void
 werrstr(char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 	char buf[ERRMAX];
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vseprint(buf, buf+ERRMAX, fmt, arg);
 	va_end(arg);
 	errstr(buf, ERRMAX);

+ 2 - 4
sys/src/libc/fmt/fmtprint.c

@@ -19,14 +19,12 @@
 int
 fmtprint(Fmt *f, char *fmt, ...)
 {
-	va_list va, args;
+	va_list va;
 	int n;
 
 	va_start(va, fmt);
-	va_copy(args, va);
+	n = fmtvprint(f, fmt, va);
 	va_end(va);
-	n = fmtvprint(f, fmt, args);
-	va_end(args);
 	return n;
 }
 

+ 2 - 4
sys/src/libc/fmt/fprint.c

@@ -13,12 +13,10 @@
 int
 fprint(int fd, char *fmt, ...)
 {
-	va_list va, args;
 	int n;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	n = vfprint(fd, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libc/fmt/print.c

@@ -13,12 +13,10 @@
 int
 print(char *fmt, ...)
 {
-	va_list va, args;
 	int n;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	n = vfprint(1, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libc/fmt/runeseprint.c

@@ -13,12 +13,10 @@
 Rune*
 runeseprint(Rune *buf, Rune *e, char *fmt, ...)
 {
-	va_list va, args;
 	Rune *p;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	p = runevseprint(buf, e, fmt, args);
 	va_end(args);
 	return p;

+ 2 - 4
sys/src/libc/fmt/runesmprint.c

@@ -13,12 +13,10 @@
 Rune*
 runesmprint(char *fmt, ...)
 {
-	va_list va, args;
+	va_list args;
 	Rune *p;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	p = runevsmprint(fmt, args);
 	va_end(args);
 	return p;

+ 2 - 4
sys/src/libc/fmt/runesnprint.c

@@ -13,13 +13,11 @@
 int
 runesnprint(Rune *buf, int len, char *fmt, ...)
 {
-	va_list va, args;
 	int n;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
+	va_start(args, fmt);
 	n = runevsnprint(buf, len, fmt, args);
-	va_end(va);
 	va_end(args);
 	return n;
 }

+ 2 - 4
sys/src/libc/fmt/runesprint.c

@@ -13,13 +13,11 @@
 int
 runesprint(Rune *buf, char *fmt, ...)
 {
-	va_list va, args;
 	int n;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
+	va_start(args, fmt);
 	n = runevsnprint(buf, 256, fmt, args);
-	va_end(va);
 	va_end(args);
 	return n;
 }

+ 2 - 4
sys/src/libc/fmt/seprint.c

@@ -13,12 +13,10 @@
 char*
 seprint(char *buf, char *e, char *fmt, ...)
 {
-	va_list va, args;
 	char *p;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	p = vseprint(buf, e, fmt, args);
 	va_end(args);
 	return p;

+ 2 - 4
sys/src/libc/fmt/smprint.c

@@ -13,12 +13,10 @@
 char*
 smprint(char *fmt, ...)
 {
-	va_list va, args;
+	va_list args;
 	char *p;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	p = vsmprint(fmt, args);
 	va_end(args);
 	setmalloctag(p, getcallerpc(&fmt));

+ 2 - 4
sys/src/libc/fmt/snprint.c

@@ -13,12 +13,10 @@
 int
 snprint(char *buf, int len, char *fmt, ...)
 {
-	va_list va, args;
 	int n;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	n = vsnprint(buf, len, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libc/fmt/sprint.c

@@ -13,12 +13,10 @@
 int
 sprint(char *buf, char *fmt, ...)
 {
-	va_list va, args;
 	int n;
+	va_list args;
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	n = vsnprint(buf, 65536, fmt, args);	/* big number, but sprint is deprecated anyway */
 	va_end(args);
 	return n;

+ 1 - 1
sys/src/libc/port/cistrcmp.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 int
-cistrcmp(const char *s1, const char *s2)
+cistrcmp(char *s1, char *s2)
 {
 	int c1, c2;
 

+ 1 - 1
sys/src/libc/port/cistrncmp.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 int
-cistrncmp(const char *s1, const char *s2, int n)
+cistrncmp(char *s1, char *s2, int n)
 {
 	int c1, c2;
 

+ 3 - 3
sys/src/libc/port/cistrstr.c

@@ -11,13 +11,13 @@
 #include <libc.h>
 
 char*
-cistrstr(const char *s, const char *sub)
+cistrstr(char *s, char *sub)
 {
 	int c, csub, n;
 
 	csub = *sub;
 	if(csub == '\0')
-		return (char *)s;
+		return s;
 	if(csub >= 'A' && csub <= 'Z')
 		csub -= 'A' - 'a';
 	sub++;
@@ -26,7 +26,7 @@ cistrstr(const char *s, const char *sub)
 		if(c >= 'A' && c <= 'Z')
 			c -= 'A' - 'a';
 		if(c == csub && cistrncmp(s+1, sub, n) == 0)
-			return (char *)s;
+			return s;
 	}
 	return nil;
 }

+ 4 - 8
sys/src/libc/port/malloc.c

@@ -127,7 +127,7 @@ checkenv(void)
 static void
 pprint(Pool *p, char *fmt, ...)
 {
-	va_list va, v;
+	va_list v;
 	Private *pv;
 
 	pv = p->private;
@@ -137,9 +137,7 @@ pprint(Pool *p, char *fmt, ...)
 	if(pv->printfd <= 0)
 		pv->printfd = 2;
 
-	va_start(va, fmt);
-	va_copy(v, va);
-	va_end(va);
+	va_start(v, fmt);
 	vfprint(pv->printfd, fmt, v);
 	va_end(v);
 }
@@ -148,7 +146,7 @@ static char panicbuf[256];
 static void
 ppanic(Pool *p, char *fmt, ...) 
 {
-	va_list va, v;
+	va_list v;
 	int n;
 	char *msg;
 	Private *pv;
@@ -162,9 +160,7 @@ ppanic(Pool *p, char *fmt, ...)
 		pv->printfd = 2;
 
 	msg = panicbuf;
-	va_start(va, fmt);
-	va_copy(v, va);
-	va_end(va);
+	va_start(v, fmt);
 	n = vseprint(msg, msg+sizeof panicbuf, fmt, v) - msg;
 	write(2, "panic: ", 7);
 	write(2, msg, n);

+ 2 - 3
sys/src/libc/port/memccpy.c

@@ -11,10 +11,9 @@
 #include	<libc.h>
 
 void*
-memccpy(void *a1, const void *a2, int c, uint32_t n)
+memccpy(void *a1, void *a2, int c, uint32_t n)
 {
-	uint8_t *s1; 
-	const char*s2;
+	uint8_t *s1, *s2;
 
 	s1 = a1;
 	s2 = a2;

+ 3 - 3
sys/src/libc/port/pool.c

@@ -396,7 +396,7 @@ pooladd(Pool *p, Alloc *anode)
 
 	node = (Free*)anode;
 	node->magic = FREE_MAGIC;
-	parent = ltreewalk((Free **)&p->freeroot, node->size);
+	parent = ltreewalk(&p->freeroot, node->size);
 	olst = *parent;
 	lst = listadd(olst, node);
 	if(olst != lst)	/* need to update tree */
@@ -412,7 +412,7 @@ pooldel(Pool *p, Free *node)
 	Free *lst, *olst;
 	Free **parent;
 
-	parent = ltreewalk((Free **)&p->freeroot, node->size);
+	parent = ltreewalk(&p->freeroot, node->size);
 	olst = *parent;
 	assert(olst != nil /* pooldel */);
 
@@ -474,7 +474,7 @@ blockmerge(Pool *pool, Bhdr *a, Bhdr *b)
 		pooldel(pool, (Free*)b);
 
 	t = B2T(a);
-	t->size = (uint64_t)Poison;
+	t->size = (uint32_t)Poison;
 	t->magic0 = (uint8_t)NOT_MAGIC;
 	t->magic1 = (uint8_t)NOT_MAGIC;
 	PSHORT(t->datasize, NOT_MAGIC);

+ 1 - 1
sys/src/libc/port/strcat.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 char*
-strcat(char *s1, const char *s2)
+strcat(char *s1, char *s2)
 {
 
 	strcpy(strchr(s1, 0), s2);

+ 3 - 3
sys/src/libc/port/strchr.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 char*
-strchr(const char *s, int c)
+strchr(char *s, int c)
 {
 	char c0 = c;
 	char c1;
@@ -19,11 +19,11 @@ strchr(const char *s, int c)
 	if(c == 0) {
 		while(*s++)
 			;
-		return (char *)s-1;
+		return s-1;
 	}
 
 	while(c1 = *s++)
 		if(c1 == c0)
-			return (char *)s-1;
+			return s-1;
 	return 0;
 }

+ 1 - 1
sys/src/libc/port/strcmp.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 int
-strcmp(const char *s1, const char *s2)
+strcmp(char *s1, char *s2)
 {
 	unsigned c1, c2;
 

+ 1 - 1
sys/src/libc/port/strcpy.c

@@ -12,7 +12,7 @@
 #define	N	10000
 
 char*
-strcpy(char *s1, const char *s2)
+strcpy(char *s1, char *s2)
 {
 	char *os1;
 

+ 2 - 3
sys/src/libc/port/strcspn.c

@@ -13,10 +13,9 @@
 #define	N	256
 
 int32_t
-strcspn(const char *s, const char *b)
+strcspn(char *s, char *b)
 {
-	char map[N];
-	const char *os;
+	char map[N], *os;
 
 	memset(map, 0, N);
 	for(;;) {

+ 1 - 1
sys/src/libc/port/strdup.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 char*
-strdup(const char *s) 
+strdup(char *s) 
 {  
 	char *ns;
 

+ 1 - 1
sys/src/libc/port/strlen.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 int32_t
-strlen(const char *s)
+strlen(char *s)
 {
 
 	return strchr(s, 0) - s;

+ 1 - 1
sys/src/libc/port/strncat.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 char*
-strncat(char *s1, const char *s2, int32_t n)
+strncat(char *s1, char *s2, int32_t n)
 {
 	char *os1;
 

+ 1 - 1
sys/src/libc/port/strncmp.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 int
-strncmp(const char *s1, const char *s2, int32_t n)
+strncmp(char *s1, char *s2, int32_t n)
 {
 	unsigned c1, c2;
 

+ 1 - 1
sys/src/libc/port/strncpy.c

@@ -11,7 +11,7 @@
 #include <libc.h>
 
 char*
-strncpy(char *s1, const char *s2, uint32_t n)
+strncpy(char *s1, char *s2, uint32_t n)
 {
 	int i;
 	char *os1;

+ 1 - 1
sys/src/libc/port/strpbrk.c

@@ -12,7 +12,7 @@
 #define	N	256
 
 char*
-strpbrk(const char *cs, const char *cb)
+strpbrk(char *cs, char *cb)
 {
 	char map[N];
 	uint8_t *s=(uint8_t*)cs, *b=(uint8_t*)cb;

+ 3 - 3
sys/src/libc/port/strrchr.c

@@ -11,14 +11,14 @@
 #include <libc.h>
 
 char*
-strrchr(const char *s, int c)
+strrchr(char *s, int c)
 {
-	const char *r;
+	char *r;
 
 	if(c == 0)
 		return strchr(s, 0);
 	r = 0;
 	while(s = strchr(s, c))
 		r = s++;
-	return (char*)r;
+	return r;
 }

+ 2 - 3
sys/src/libc/port/strspn.c

@@ -13,10 +13,9 @@
 #define	N	256
 
 int32_t
-strspn(const char *s, const char *b)
+strspn(char *s, char *b)
 {
-	char map[N];
-	const char *os;
+	char map[N], *os;
 
 	memset(map, 0, N);
 	while(*b)

+ 3 - 4
sys/src/libc/port/strstr.c

@@ -15,15 +15,14 @@
  * 0 if none
  */
 char*
-strstr(const char *s1, const char *s2)
+strstr(char *s1, char *s2)
 {
-	char *p, *pa;
-	const char *pb;
+	char *p, *pa, *pb;
 	int c0, c;
 
 	c0 = *s2;
 	if(c0 == 0)
-		return (char*)s1;
+		return s1;
 	s2++;
 	for(p=strchr(s1, c0); p; p=strchr(p+1, c0)) {
 		pa = p;

+ 1 - 1
sys/src/libc/port/strtok.c

@@ -13,7 +13,7 @@
 #define	N	256
 
 char*
-strtok(char *s, const char *b)
+strtok(char *s, char *b)
 {
 	static char *under_rock;
 	char map[N], *os;

+ 7 - 15
sys/src/libcontrol/control.c

@@ -72,13 +72,11 @@ static char*
 _mkctlcmd(Control *c, char *fmt, va_list arg)
 {
 	char *name, *p, *both;
-	va_list va;
 
 	name = quotestrdup(c->name);
 	if(name == nil)
 		ctlerror("quotestrdup in ctlprint failed");
-	va_copy(arg, va);
-	p = vsmprint(fmt, va);
+	p = vsmprint(fmt, arg);
 	if(p == nil){
 		free(name);
 		ctlerror("vsmprint1 in ctlprint failed");
@@ -97,11 +95,9 @@ ctlprint(Control *c, char *fmt, ...)
 {
 	int n;
 	char *p;
-	va_list va, arg;
+	va_list arg;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = _mkctlcmd(c, fmt, arg);
 	va_end(arg);
 	n = sendp(c->controlset->ctl, p);
@@ -113,11 +109,9 @@ void
 _ctlprint(Control *c, char *fmt, ...)
 {
 	char *p;
-	va_list va, arg;
+	va_list arg;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = _mkctlcmd(c, fmt, arg);
 	va_end(arg);
 	_ctlcmd(c->controlset, p);
@@ -333,12 +327,10 @@ controlcalled(char *name)
 void
 ctlerror(char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 	char buf[256];
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vfprint(2, fmt, arg);
 	va_end(arg);
 	write(2, "\n", 1);

+ 1 - 3
sys/src/libdisk/proto.c

@@ -504,11 +504,9 @@ static void
 warn(Mkaux *mkaux, char *fmt, ...)
 {
 	char buf[256];
-	va_list va, va2;
+	va_list va;
 
 	va_start(va, fmt);
-	va_copy(va2, va);
-	va_end(va2);
 	vseprint(buf, buf+sizeof(buf), fmt, va);
 	va_end(va);
 

+ 2 - 4
sys/src/libhttpd/fail.c

@@ -60,14 +60,12 @@ hfail(HConnect *c, int reason, ...)
 {
 	Hio *hout;
 	char makeup[HBufSize], err[ERRMAX];
-	va_list va, arg;
+	va_list arg;
 	int n;
 
 	rerrstr(err, sizeof err);
 	hout = &c->hout;
-	va_start(va, reason);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, reason);
 	vseprint(makeup, makeup+HBufSize, errormsg[reason].verbose, arg);
 	va_end(arg);
 	/*

+ 2 - 4
sys/src/libhttpd/hio.c

@@ -395,11 +395,9 @@ int
 hprint(Hio *h, char *fmt, ...)
 {
 	int n;
-	va_list va, arg;
+	va_list arg;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	n = hvprint(h, fmt, arg);
 	va_end(arg);
 	return n;

+ 1 - 3
sys/src/libmemdraw/arctest.c

@@ -61,12 +61,10 @@ int
 iprint(char *fmt, ...)
 {
 	int n;	
-	va_list va, va2;
+	va_list va;
 	char buf[1024];
 
 	va_start(va, fmt);
-	va_copy(va2, va);
-	va_end(va2);
 	n = vseprint(buf, buf+sizeof buf, fmt, va) - buf;
 	va_end(va);
 

+ 1 - 3
sys/src/libmemdraw/drawtest.c

@@ -67,12 +67,10 @@ int
 iprint(char *fmt, ...)
 {
 	int n;	
-	va_list va, va2;
+	va_list va;
 	char buf[1024];
 
 	va_start(va, fmt);
-	va_copy(va2, va);
-	va_end(va2);
 	n = vseprint(buf, buf+sizeof buf, fmt, va) - buf;
 	va_end(va);
 

+ 2 - 4
sys/src/liboventi/debug.c

@@ -17,14 +17,12 @@ void vtDumpSome(Packet*);
 void
 vtDebug(VtSession *s, char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 
 	if(!s->debug)
 		return;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vfprint(2, fmt, arg);
 	va_end(arg);
 }

+ 2 - 4
sys/src/liboventi/fatal.c

@@ -14,11 +14,9 @@
 void
 vtFatal(char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	fprint(2, "fatal error: ");
 	vfprint(2, fmt, arg);
 	fprint(2, "\n");

+ 2 - 4
sys/src/liboventi/plan9-thread.c

@@ -142,13 +142,11 @@ vtSetError(char* fmt, ...)
 {
 	Thread *p;
 	char *s;
-	va_list va, args;
+	va_list args;
 
 	p = threadLookup();
 
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	s = vsmprint(fmt, args);
 	vtMemFree(p->error);
 	p->error = s;

+ 2 - 4
sys/src/libsec/port/tlshand.c

@@ -1393,11 +1393,9 @@ static void
 tlsError(TlsConnection *c, int err, char *fmt, ...)
 {
 	char msg[512];
-	va_list va, arg;
+	va_list arg;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vseprint(msg, msg+sizeof(msg), fmt, arg);
 	va_end(arg);
 	if(c->trace)

+ 2 - 4
sys/src/libstdio/fprintf.c

@@ -13,10 +13,8 @@
 #include "iolib.h"
 int fprintf(FILE *f, const char *fmt, ...){
 	int n;
-	va_list va, args;
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_list args;
+	va_start(args, fmt);
 	n=vfprintf(f, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libstdio/fscanf.c

@@ -13,10 +13,8 @@
 #include "iolib.h"
 int fscanf(FILE *f, const char *fmt, ...){
 	int n;
-	va_list va, args;
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_list args;
+	va_start(args, fmt);
 	n=vfscanf(f, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libstdio/printf.c

@@ -13,10 +13,8 @@
 #include "iolib.h"
 int printf(const char *fmt, ...){
 	int n;
-	va_list va, args;
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_list args;
+	va_start(args, fmt);
 	n=vfprintf(stdout, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libstdio/scanf.c

@@ -13,10 +13,8 @@
 #include "iolib.h"
 int scanf(const char *fmt, ...){
 	int n;
-	va_list va, args;
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_list args;
+	va_start(args, fmt);
 	n=vfscanf(stdin, fmt, args);
 	va_end(args);
 	return n;

+ 2 - 4
sys/src/libstdio/snprintf.c

@@ -13,14 +13,12 @@
 #include "iolib.h"
 int snprintf(char *buf, int nbuf, const char *fmt, ...){
 	int n;
-	va_list va, args;
+	va_list args;
 	FILE *f=sopenw();
 	if(f==NULL)
 		return 0;
 	setvbuf(f, buf, _IOFBF, nbuf);
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	n=vfprintf(f, fmt, args);
 	va_end(args);
 	sclose(f);

+ 2 - 4
sys/src/libstdio/sprintf.c

@@ -13,14 +13,12 @@
 #include "iolib.h"
 int sprintf(char *buf, const char *fmt, ...){
 	int n;
-	va_list va, args;
+	va_list args;
 	FILE *f=sopenw();
 	if(f==NULL)
 		return 0;
 	setvbuf(f, buf, _IOFBF, 100000);
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_start(args, fmt);
 	n=vfprintf(f, fmt, args);
 	va_end(args);
 	sclose(f);

+ 2 - 4
sys/src/libstdio/sscanf.c

@@ -13,11 +13,9 @@
 #include "iolib.h"
 int sscanf(const char *s, const char *fmt, ...){
 	int n;
-	va_list va, args;
 	FILE *f=sopenr(s);
-	va_start(va, fmt);
-	va_copy(args, va);
-	va_end(va);
+	va_list args;
+	va_start(args, fmt);
 	n=vfscanf(f, fmt, args);
 	va_end(args);
 	sclose(f);

+ 6 - 9
sys/src/libstdio/vfprintf.c

@@ -159,9 +159,6 @@ vfprintf(FILE *f, const char *s, va_list args)
 {
 	int flags, width, precision;
 
-	va_list vargs;
-	va_copy(vargs, args);
-
 	qlock(&_stdiolk);
 
 	nprint = 0;
@@ -200,7 +197,7 @@ vfprintf(FILE *f, const char *s, va_list args)
 		else
 			precision = -1;
 		while(tflag[*s&_IO_CHMASK]) flags |= tflag[*s++&_IO_CHMASK];
-		if(ocvt[(int)*s]) nprint += (*ocvt[(int)*s++])(f, &vargs, flags, width, precision);
+		if(ocvt[*s]) nprint += (*ocvt[*s++])(f, &args, flags, width, precision);
 		else if(*s){
 			putc(*s++, f);
 			nprint++;
@@ -305,8 +302,8 @@ ocvt_fixed(FILE *f, va_list *args, int flags, int width, int precision,
 	int nout, npad, nlzero;
 
 	if(sgned){
-		if(flags&PTR) snum = (int64_t)va_arg(*args, void *);
-		else if(flags&SHORT) snum = va_arg(*args, int);
+		if(flags&PTR) snum = (int32_t)va_arg(*args, void *);
+		else if(flags&SHORT) snum = va_arg(*args, int16_t);
 		else if(flags&LONG) snum = va_arg(*args, int32_t);
 		else snum = va_arg(*args, int);
 		if(snum < 0){
@@ -320,9 +317,9 @@ ocvt_fixed(FILE *f, va_list *args, int flags, int width, int precision,
 		}
 	} else {
 		sign = "";
-		if(flags&PTR) num = (int64_t)va_arg(*args, void *);
-		else if(flags&SHORT) num = va_arg(*args, uint);
-		else if(flags&LONG) num = va_arg(*args, uint32_t);
+		if(flags&PTR) num = (int32_t)va_arg(*args, void *);
+		else if(flags&SHORT) num = va_arg(*args, unsigned short);
+		else if(flags&LONG) num = va_arg(*args, unsigned long);
 		else num = va_arg(*args, unsigned int);
 	}
 	if(num == 0) prefix = "";

+ 3 - 8
sys/src/libstdio/vfscanf.c

@@ -68,10 +68,6 @@ static const char *fmtp;
 
 int vfscanf(FILE *f, const char *s, va_list args){
 	int c, width, type, store;
-
-	va_list vargs;
-	va_copy(vargs, args);
-
 	nread=0;
 	ncvt=0;
 	fmtp=s;
@@ -107,14 +103,13 @@ int vfscanf(FILE *f, const char *s, va_list args){
 		else
 			width=-1;
 		type=*fmtp=='h' || *fmtp=='l' || *fmtp=='L'?*fmtp++:'n';
-		if(!icvt[(int)*fmtp]) goto NonSpecial;
-
-		if(!(*icvt[(int)*fmtp])(f, &vargs, store, width, type))
+		if(!icvt[*fmtp]) goto NonSpecial;
+		if(!(*icvt[*fmtp])(f, &args, store, width, type))
 			return ncvt?ncvt:EOF;
 		if(*fmtp=='\0') break;
 		if(store) ncvt++;
 	}
-	return ncvt;
+	return ncvt;	
 }
 static int icvt_n(FILE *f, va_list *args, int store, int width, int type){
 #pragma ref f

+ 2 - 4
sys/src/libthread/debug.c

@@ -18,7 +18,7 @@ void
 _threaddebug(uint32_t flag, char *fmt, ...)
 {
 	char buf[128];
-	va_list va, arg;
+	va_list arg;
 	Fmt f;
 	Proc *p;
 
@@ -35,9 +35,7 @@ _threaddebug(uint32_t flag, char *fmt, ...)
 	else
 		fmtprint(&f, "%d._ ", p->pid);
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	fmtvprint(&f, fmt, arg);
 	va_end(arg);
 	fmtprint(&f, "\n");

+ 1 - 21
sys/src/libthread/exec.c

@@ -84,26 +84,6 @@ procexec(Channel *pidc, char *prog, char *args[])
 void
 procexecl(Channel *pidc, char *f, ...)
 {
-	va_list va, va2;
-	char *arg;
-	int n;
-
-	va_start(va, f);
-	va_copy(va2, va);
-
-	n = 0;
-	while((arg = va_arg(va, char *)) != nil)
-		n++;
-
-	char *args[n+1];
-
-	n = 0;
-	while((arg = va_arg(va2, char *)) != nil)
-		args[n++] = arg;
-	args[n] = nil;
-
-	va_end(va);
-	va_end(va2);
-	procexec(pidc, f, args);
+	procexec(pidc, f, &f+1);
 }
 

+ 2 - 4
sys/src/libthread/id.c

@@ -69,7 +69,7 @@ threadsetname(char *fmt, ...)
 {
 	int fd;
 	char buf[128];
-	va_list va, arg;
+	va_list arg;
 	Proc *p;
 	Thread *t;
 
@@ -77,9 +77,7 @@ threadsetname(char *fmt, ...)
 	t = p->thread;
 	if (t->cmdname)
 		free(t->cmdname);
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	t->cmdname = vsmprint(fmt, arg);
 	va_end(arg);
 	if(t->cmdname && p->nthreads == 1){

+ 2 - 4
sys/src/libthread/iocall.c

@@ -17,7 +17,6 @@ iocall(Ioproc *io, int32_t (*op)(va_list*), ...)
 {
 	int ret, inted;
 	Ioproc *msg;
-	va_list va;
 
 	if(send(io->c, &io) == -1){
 		werrstr("interrupted");
@@ -26,8 +25,7 @@ iocall(Ioproc *io, int32_t (*op)(va_list*), ...)
 	assert(!io->inuse);
 	io->inuse = 1;
 	io->op = op;
-	va_start(va, op);
-	va_copy(io->arg, va);
+	va_start(io->arg, op);
 	msg = io;
 	inted = 0;
 	while(send(io->creply, &msg) == -1){
@@ -50,7 +48,7 @@ iocall(Ioproc *io, int32_t (*op)(va_list*), ...)
 		iointerrupt(io);
 	}
 	USED(inted);
-	va_end(va);
+	va_end(io->arg);
 	ret = io->ret;
 	if(ret < 0)
 		errstr(io->err, sizeof io->err);

+ 2 - 4
sys/src/libthread/lib.c

@@ -36,12 +36,10 @@ _threadmalloc(int32_t size, int z)
 void
 _threadsysfatal(char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 	char buf[1024];	/* size doesn't matter; we're about to exit */
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vseprint(buf, buf+sizeof(buf), fmt, arg);
 	va_end(arg);
 	if(argv0)

+ 2 - 4
sys/src/libventi/debug.c

@@ -14,14 +14,12 @@
 void
 vtdebug(VtConn *z, char *fmt, ...)
 {
-	va_list va, arg;
+	va_list arg;
 
 	if(z->debug == 0)
 		return;
 
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vfprint(2, fmt, arg);
 	va_end(arg);
 }

+ 8 - 14
sys/src/libventi/log.c

@@ -192,7 +192,7 @@ vtlogvprint(VtLog *l, char *fmt, ...)
 	char *p;
 	VtLogChunk *c;
 	static int first = 1;
-	va_list va, arg;
+	va_list arg;
 
 	if(l == nil)
 		return;
@@ -212,9 +212,7 @@ vtlogvprint(VtLog *l, char *fmt, ...)
 		c->wp = c->p;
 		l->w = c;
 	}
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	p = vseprint(c->wp, c->ep, fmt, arg);
 	va_end(arg);
 	if(p)
@@ -225,14 +223,12 @@ vtlogvprint(VtLog *l, char *fmt, ...)
 void
 vtlogprint(VtLog *l, char *fmt, ...)
 {
-	va_list va, arg;
-
+	va_list arg;
+	
 	if(l == nil)
 		return;
-
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+		
+	va_start(arg, fmt);
 	vtlogvprint(l, fmt, arg);
 	va_end(arg);
 }
@@ -241,14 +237,12 @@ void
 vtlog(char *name, char *fmt, ...)
 {
 	VtLog *l;
-	va_list va, arg;
+	va_list arg;
 
 	l = vtlogopen(name, LogSize);
 	if(l == nil)
 		return;
-	va_start(va, fmt);
-	va_copy(arg, va);
-	va_end(va);
+	va_start(arg, fmt);
 	vtlogvprint(l, fmt, arg);
 	va_end(arg);
 	vtlogclose(l);