tbetter symlink - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 98660df2502a6b2c92c651e6bc3f4a8be6143bb5
 (DIR) parent 5db61d6221fc96c9734f96846193bfc66eee2d8f
 (HTM) Author: rsc <devnull@localhost>
       Date:   Mon, 21 Feb 2005 14:25:12 +0000
       
       better symlink
       
       Diffstat:
         M src/lib9/_p9dir.c                   |       3 +--
         M src/lib9/dirmodefmt.c               |      11 +++++++++--
       
       2 files changed, 10 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/src/lib9/_p9dir.c b/src/lib9/_p9dir.c
       t@@ -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;
 (DIR) diff --git a/src/lib9/dirmodefmt.c b/src/lib9/dirmodefmt.c
       t@@ -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);