set qid.vers (Erik Quanstrom)
diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
index 25e6394..2028c1a 100644
--- a/src/lib9/_p9dir.c
+++ b/src/lib9/_p9dir.c
@@ -64,7 +64,7 @@
 		return u64;
 #endif
 	if(ioctl(fd, BLKGETSIZE, &l) >= 0)
-		return (vlong)l*512;
+		return l*512;
 	if(ioctl(fd, HDIO_GETGEO, &geo) >= 0)
 		return (vlong)geo.heads*geo.sectors*geo.cylinders*512;
 	return 0;
@@ -173,6 +173,8 @@
 #ifdef _HAVESTGEN
 		d->qid.vers = st->st_gen;
 #endif
+		if(d->qid.vers == 0)
+			d->qid.vers = st->st_mtime + st->st_ctime;
 		d->mode = st->st_mode&0777;
 		d->atime = st->st_atime;
 		d->mtime = st->st_mtime;
diff --git a/src/lib9/dial.c b/src/lib9/dial.c
index da9019a..dcbdc0b 100644
--- a/src/lib9/dial.c
+++ b/src/lib9/dial.c
@@ -60,10 +60,6 @@
 	}
 	free(buf);
 
-	memset(&sa, 0, sizeof sa);
-	memmove(&sa.sin_addr, &host, 4);
-	sa.sin_family = AF_INET;
-	sa.sin_port = htons(port);
 	if((s = socket(AF_INET, proto, 0)) < 0)
 		return -1;
 		
@@ -100,9 +96,15 @@
 
 	n = 1;
 	setsockopt(s, SOL_SOCKET, SO_BROADCAST, &n, sizeof n);
-	if(connect(s, (struct sockaddr*)&sa, sizeof sa) < 0){
-		close(s);
-		return -1;
+	if(host != 0){
+		memset(&sa, 0, sizeof sa);
+		memmove(&sa.sin_addr, &host, 4);
+		sa.sin_family = AF_INET;
+		sa.sin_port = htons(port);
+		if(connect(s, (struct sockaddr*)&sa, sizeof sa) < 0){
+			close(s);
+			return -1;
+		}
 	}
 	if(proto == SOCK_STREAM){
 		int one = 1;
diff --git a/src/lib9/fmt/fmtfd.c b/src/lib9/fmt/fmtfd.c
index d15be92..9f35f02 100644
--- a/src/lib9/fmt/fmtfd.c
+++ b/src/lib9/fmt/fmtfd.c
@@ -40,7 +40,7 @@
 	f->to = buf;
 	f->stop = buf + size;
 	f->flush = __fmtFdFlush;
-	f->farg = (void*)fd;
+	f->farg = (void*)(uintptr_t)fd;
 	f->nfmt = 0;
 	return 0;
 }
diff --git a/src/lib9/fmt/fmtfdflush.c b/src/lib9/fmt/fmtfdflush.c
index b797007..b615416 100644
--- a/src/lib9/fmt/fmtfdflush.c
+++ b/src/lib9/fmt/fmtfdflush.c
@@ -27,7 +27,7 @@
 	int n;
 
 	n = (char*)f->to - (char*)f->start;
-	if(n && write((int)f->farg, f->start, n) != n)
+	if(n && write((uintptr)f->farg, f->start, n) != n)
 		return 0;
 	f->to = f->start;
 	return 1;
diff --git a/src/lib9/fmt/runevsmprint.c b/src/lib9/fmt/runevsmprint.c
index 19a4654..f83dce2 100644
--- a/src/lib9/fmt/runevsmprint.c
+++ b/src/lib9/fmt/runevsmprint.c
@@ -36,7 +36,7 @@
 
 	if(f->start == nil)
 		return 0;
-	n = (int)f->farg;
+	n = (uintptr)f->farg;
 	n *= 2;
 	s = (Rune*)f->start;
 	f->start = realloc(s, sizeof(Rune)*n);
@@ -47,7 +47,7 @@
 		free(s);
 		return 0;
 	}
-	f->farg = (void*)n;
+	f->farg = (void*)(uintptr)n;
 	f->to = (Rune*)f->start + ((Rune*)f->to - s);
 	f->stop = (Rune*)f->start + n - 1;
 	return 1;
@@ -67,7 +67,7 @@
 	f->to = f->start;
 	f->stop = (Rune*)f->start + n - 1;
 	f->flush = runeFmtStrFlush;
-	f->farg = (void*)n;
+	f->farg = (void*)(uintptr)n;
 	f->nfmt = 0;
 	return 0;
 }
diff --git a/src/lib9/fmt/sprint.c b/src/lib9/fmt/sprint.c
index ba60228..1ab5ce6 100644
--- a/src/lib9/fmt/sprint.c
+++ b/src/lib9/fmt/sprint.c
@@ -30,7 +30,7 @@
 	 * we must be sure not to overflow a 32-bit pointer.
 	 */
 	if(buf+len < buf)
-		len = -(uint)buf-1;
+		len = -(uintptr)buf-1;
 
 	va_start(args, fmt);
 	n = vsnprint(buf, len, fmt, args);
diff --git a/src/lib9/fmt/vsmprint.c b/src/lib9/fmt/vsmprint.c
index 99cd0e3..6f49373 100644
--- a/src/lib9/fmt/vsmprint.c
+++ b/src/lib9/fmt/vsmprint.c
@@ -36,7 +36,7 @@
 
 	if(f->start == nil)
 		return 0;
-	n = (int)f->farg;
+	n = (uintptr)f->farg;
 	n *= 2;
 	s = (char*)f->start;
 	f->start = realloc(s, n);
@@ -47,7 +47,7 @@
 		free(s);
 		return 0;
 	}
-	f->farg = (void*)n;
+	f->farg = (void*)(uintptr)n;
 	f->to = (char*)f->start + ((char*)f->to - s);
 	f->stop = (char*)f->start + n - 1;
 	return 1;
@@ -67,7 +67,7 @@
 	f->to = f->start;
 	f->stop = (char*)f->start + n - 1;
 	f->flush = fmtStrFlush;
-	f->farg = (void*)n;
+	f->farg = (void*)(uintptr)n;
 	f->nfmt = 0;
 	return 0;
 }