expose unix mode bits
diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
index 4f95932..8a748b9 100644
--- a/src/lib9/_p9dir.c
+++ b/src/lib9/_p9dir.c
@@ -181,6 +181,20 @@
 			d->qid.type = QTDIR;
 		}
 
+		if(S_ISLNK(st->st_mode))
+			d->mode |= DMSYMLINK;
+		if(S_ISFIFO(st->st_mode))
+			d->mode |= DMNAMEDPIPE;
+		if(S_ISSOCK(st->st_mode))
+			d->mode |= DMSOCKET;
+		if(S_ISBLK(st->st_mode)){
+			d->mode |= DMDEVICE;
+			d->qid.path = ('b'<<16)|st->st_rdev;
+		}
+		if(S_ISCHR(st->st_mode)){
+			d->mode |= DMDEVICE;
+			d->qid.path = ('c'<<16)|st->st_rdev;
+		}
 		/* fetch real size for disks */
 #ifdef _HAVEDISKSIZE
 		if(S_ISBLK(st->st_mode) && (fd = open(name, O_RDONLY)) >= 0){