aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-02-21 14:25:12 +0000
committerrsc <devnull@localhost>2005-02-21 14:25:12 +0000
commit98660df2502a6b2c92c651e6bc3f4a8be6143bb5 (patch)
tree247aca65fc3f45bb1a799686943ff69ccffd31d2
parent5db61d6221fc96c9734f96846193bfc66eee2d8f (diff)
downloadplan9port-98660df2502a6b2c92c651e6bc3f4a8be6143bb5.tar.gz
plan9port-98660df2502a6b2c92c651e6bc3f4a8be6143bb5.tar.bz2
plan9port-98660df2502a6b2c92c651e6bc3f4a8be6143bb5.zip
better symlink
-rw-r--r--src/lib9/_p9dir.c3
-rw-r--r--src/lib9/dirmodefmt.c11
2 files changed, 10 insertions, 4 deletions
diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
index 8a748b9d..ce2dcecd 100644
--- a/src/lib9/_p9dir.c
+++ b/src/lib9/_p9dir.c
@@ -180,8 +180,7 @@ _p9dir(struct stat *lst, struct stat *st, char *name, Dir *d, char **str, char *
d->mode |= DMDIR;
d->qid.type = QTDIR;
}
-
- if(S_ISLNK(st->st_mode))
+ if(S_ISLNK(lst->st_mode)) /* yes, lst not st */
d->mode |= DMSYMLINK;
if(S_ISFIFO(st->st_mode))
d->mode |= DMNAMEDPIPE;
diff --git a/src/lib9/dirmodefmt.c b/src/lib9/dirmodefmt.c
index 790b5fa0..05b1ce61 100644
--- a/src/lib9/dirmodefmt.c
+++ b/src/lib9/dirmodefmt.c
@@ -35,16 +35,23 @@ dirmodefmt(Fmt *f)
buf[0]='A';
else if(m & DMDEVICE)
buf[0] = 'D';
- else if(m & DMSYMLINK)
- buf[0] = 'L';
else if(m & DMSOCKET)
buf[0] = 'S';
else if(m & DMNAMEDPIPE)
buf[0] = 'P';
else
buf[0]='-';
+
+ /*
+ * It's a little weird to have DMSYMLINK conflict with DMEXCL
+ * here, but since you can have symlinks to any of the above
+ * things, this is a better display. Especially since we don't do
+ * DMEXCL on any of the supported systems.
+ */
if(m & DMEXCL)
buf[1]='l';
+ else if(m & DMSYMLINK)
+ buf[1] = 'L';
else
buf[1]='-';
rwx((m>>6)&7, buf+2);