Various fixes.

	B - fixed usage, DISPLAY :0 vs :0.0
	9term - fixed various terminal things
	rc - notice traps in Read
	_p9dir - only run disk code for disks
	dirread - getdirentries on FreeBSD and Linux
		are different w.r.t. meaning of off.
	notify - set up so signals interrupt system calls
	bprint - use bfmt.
diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
index 4375222..af2a16c 100644
--- a/src/lib9/_p9dir.c
+++ b/src/lib9/_p9dir.c
@@ -10,6 +10,36 @@
 
 #if defined(__FreeBSD__)
 #include <sys/disklabel.h>
+static int diskdev[] = {
+	151,	/* aacd */
+	116,	/* ad */
+	157,	/* ar */
+	118,	/* afd */
+	133,	/* amrd */
+	13,	/* da */
+	102,	/* fla */
+	109,	/* idad */
+	95,	/* md */
+	131,	/* mlxd */
+	168,	/* pst */
+	147,	/* twed */
+	43,	/* vn */
+	3,	/* wd */
+	87,	/* wfd */
+};
+static int
+isdisk(struct stat *st)
+{
+	int i, dev;
+
+	if(!S_ISCHR(st->st_mode))
+		return 0;
+	dev = major(st->st_rdev);
+	for(i=0; i<nelem(diskdev); i++)
+		if(diskdev[i] == dev)
+			return 1;
+	return 0;
+}
 #define _HAVEDISKLABEL
 #endif
 
@@ -108,7 +138,7 @@
 
 		/* fetch real size for disks */
 #ifdef _HAVEDISKLABEL
-		if(S_ISCHR(st->st_mode)){
+		if(isdisk(st)){
 			int fd, n;
 			struct disklabel lab;
 
diff --git a/src/lib9/dirread.c b/src/lib9/dirread.c
index 1e479fe..5aa5c44 100644
--- a/src/lib9/dirread.c
+++ b/src/lib9/dirread.c
@@ -10,7 +10,6 @@
 static int
 mygetdents(int fd, struct dirent *buf, int n)
 {
-	ssize_t nn;
 	off_t off;
 
 	off = p9seek(fd, 0, 1);
@@ -23,14 +22,8 @@
 static int
 mygetdents(int fd, struct dirent *buf, int n)
 {
-	ssize_t nn;
 	long off;
-
-	off = p9seek(fd, 0, 1);
-	nn = getdirentries(fd, (void*)buf, n, &off);
-	if(nn > 0)
-		p9seek(fd, off, 0);
-	return nn;
+	return getdirentries(fd, (void*)buf, n, &off);
 }
 #elif defined(__sun__)
 static int
@@ -38,7 +31,7 @@
 {
 	return getdents(fd, (void*)buf, n);
 }
-#endif	
+#endif
 
 static int
 countde(char *p, int n)
diff --git a/src/lib9/notify.c b/src/lib9/notify.c
index 7e3c04f..460eabf 100644
--- a/src/lib9/notify.c
+++ b/src/lib9/notify.c
@@ -13,7 +13,7 @@
 	SIGQUIT,
 	SIGILL,
 	SIGTRAP,
-	SIGABRT,
+/*	SIGABRT,	*/
 #ifdef SIGEMT
 	SIGEMT,
 #endif
@@ -63,16 +63,17 @@
 notify(void (*f)(void*, char*))
 {
 	int i;
-	void (*sf)(int);
+	struct sigaction sa;
 
+	memset(&sa, 0, sizeof sa);
 	if(f == nil)
-		sf = SIG_DFL;
+		sa.sa_handler = SIG_DFL;
 	else{
 		notifyf = f;
-		sf = notifysigf;
+		sa.sa_handler = notifysigf;
 	}
 	for(i=0; i<nelem(sigs); i++)
-		signal(sigs[i], sf);
+		sigaction(sigs[i], &sa, 0);
 	return 0;
 }