tavoid unix special files - 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 5fc55a953e9dcd895d9be01c528f329e8dfc685e
 (DIR) parent 8a7509066422b70655bebea156834cad6b76a86f
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue,  8 Feb 2005 20:27:10 +0000
       
       avoid unix special files
       
       Diffstat:
         M src/cmd/vac/vac.c                   |      21 +++++++--------------
       
       1 file changed, 7 insertions(+), 14 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c
       t@@ -382,18 +382,6 @@ isexcluded(char *name)
                return 0;
        }
        
       -static int
       -islink(char *name)
       -{
       -        struct stat st;
       -
       -        if(lstat(name, &st) < 0)
       -                return 0;
       -        if((st.st_mode&S_IFMT) == S_IFLNK)
       -                return 1;
       -        return 0;
       -}
       -
        static void
        vacfile(DirSink *dsink, char *lname, char *sname, VacFile *vf)
        {
       t@@ -410,9 +398,14 @@ vacfile(DirSink *dsink, char *lname, char *sname, VacFile *vf)
                if(merge && vacmerge(dsink, lname, sname) >= 0)
                        return;
        
       -        if(islink(sname))
       +        if((dir = dirstat(sname)) == nil){
       +                warn("could not stat file %s: %r", lname);
       +        if(dir->mode&(DMSYMLINK|DMDEVICE|DMNAMEDPIPE|DMSOCKET)){
       +                free(dir);
                        return;
       -
       +        }
       +        free(dir);
       +        
                fd = open(sname, OREAD);
                if(fd < 0) {
                        warn("could not open file: %s: %r", lname);