vac: fix segfault on DMSYMLINK or DMDEVICE

Fix segfault when the first archived file is DMSYMLINK or DMDEVICE.
Reinitialize the buffer to zero before calling readlink.

R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/5500097
diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c
index 5f89631..03ada7b 100644
--- a/src/cmd/vac/vac.c
+++ b/src/cmd/vac/vac.c
@@ -501,12 +501,17 @@
 
 	if(vacfilesetdir(f, &vd) < 0)
 		warn("vacfilesetdir %s: %r", name);
-	
+
+	bsize = fs->bsize;
+	if(buf == nil)
+		buf = vtmallocz(bsize);
+
 #ifdef PLAN9PORT
 	if(d->mode&(DMSOCKET|DMNAMEDPIPE)){
 		/* don't write anything */
 	}
 	else if(d->mode&DMSYMLINK){
+		memset(buf, 0, sizeof buf);
 		n = readlink(name, buf, sizeof buf);
 		if(n > 0 && vacfilewrite(f, buf, n, 0) < 0){
 			warn("venti write %s: %r", name);
@@ -539,9 +544,6 @@
 		}
 	}else{
 		off = 0;
-		bsize = fs->bsize;
-		if(buf == nil)
-			buf = vtmallocz(bsize);
 		if(fdiff){
 			/*
 			 * Copy fdiff's contents into f by moving the score.