diff options
author | rsc <devnull@localhost> | 2005-02-21 14:25:12 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-02-21 14:25:12 +0000 |
commit | 98660df2502a6b2c92c651e6bc3f4a8be6143bb5 (patch) | |
tree | 247aca65fc3f45bb1a799686943ff69ccffd31d2 /src/lib9 | |
parent | 5db61d6221fc96c9734f96846193bfc66eee2d8f (diff) | |
download | plan9port-98660df2502a6b2c92c651e6bc3f4a8be6143bb5.tar.gz plan9port-98660df2502a6b2c92c651e6bc3f4a8be6143bb5.tar.bz2 plan9port-98660df2502a6b2c92c651e6bc3f4a8be6143bb5.zip |
better symlink
Diffstat (limited to 'src/lib9')
-rw-r--r-- | src/lib9/_p9dir.c | 3 | ||||
-rw-r--r-- | src/lib9/dirmodefmt.c | 11 |
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); |