aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vac/vac.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-02-08 20:27:10 +0000
committerrsc <devnull@localhost>2005-02-08 20:27:10 +0000
commit5fc55a953e9dcd895d9be01c528f329e8dfc685e (patch)
tree44bf31312fc31812976679a12976bc69775f4609 /src/cmd/vac/vac.c
parent8a7509066422b70655bebea156834cad6b76a86f (diff)
downloadplan9port-5fc55a953e9dcd895d9be01c528f329e8dfc685e.tar.gz
plan9port-5fc55a953e9dcd895d9be01c528f329e8dfc685e.tar.bz2
plan9port-5fc55a953e9dcd895d9be01c528f329e8dfc685e.zip
avoid unix special files
Diffstat (limited to 'src/cmd/vac/vac.c')
-rw-r--r--src/cmd/vac/vac.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c
index 8065e9ab..f2595fff 100644
--- a/src/cmd/vac/vac.c
+++ b/src/cmd/vac/vac.c
@@ -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)
{
@@ -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);