summaryrefslogtreecommitdiffstats
path: root/usr.bin/find/find.c
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2012-07-25 21:59:10 +0000
committerjilles <jilles@FreeBSD.org>2012-07-25 21:59:10 +0000
commit06d71385564614c8f19a2407e234e9f2ea142750 (patch)
tree9e7e20bd4ba232a68faf9db468bc5fe8597aae6e /usr.bin/find/find.c
parent9a57e402a6d1d149388a8af3ffce132e6ea9d0dc (diff)
downloadFreeBSD-src-06d71385564614c8f19a2407e234e9f2ea142750.zip
FreeBSD-src-06d71385564614c8f19a2407e234e9f2ea142750.tar.gz
find: Implement real -ignore_readdir_race.
If -ignore_readdir_race is present, [ENOENT] errors caused by deleting a file after find has read its name from a directory are ignored. Formerly, -ignore_readdir_race did nothing. PR: bin/169723 Submitted by: Valery Khromov and Andrey Ignatov
Diffstat (limited to 'usr.bin/find/find.c')
-rw-r--r--usr.bin/find/find.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/usr.bin/find/find.c b/usr.bin/find/find.c
index 3e0921e..8ad76c1 100644
--- a/usr.bin/find/find.c
+++ b/usr.bin/find/find.c
@@ -197,8 +197,12 @@ find_execute(PLAN *plan, char *paths[])
continue;
break;
case FTS_DNR:
- case FTS_ERR:
case FTS_NS:
+ if (ignore_readdir_race &&
+ entry->fts_errno == ENOENT && entry->fts_level > 0)
+ continue;
+ /* FALLTHROUGH */
+ case FTS_ERR:
(void)fflush(stdout);
warnx("%s: %s",
entry->fts_path, strerror(entry->fts_errno));
@@ -228,7 +232,7 @@ find_execute(PLAN *plan, char *paths[])
for (p = plan; p && (p->execute)(p, entry); p = p->next);
}
finish_execplus();
- if (errno)
+ if (errno && (!ignore_readdir_race || errno != ENOENT))
err(1, "fts_read");
return (rval);
}
OpenPOWER on IntegriCloud