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);