From ea85333e1c1a82579fb86f69dc49c04544c848bf Mon Sep 17 00:00:00 2001 From: peadar Date: Sat, 8 May 2004 15:09:02 +0000 Subject: The FTS_NOSTAT option is an optimisation that reduces the number of stat(2) calls by keeping an eye of the number of links a directory has. It assumes that each subdirectory will have a hard link to its parent, to represent the ".." node, and stops calling stat(2) when all links are accounted for in a given directory. This assumption is really only valid for UNIX-like filesystems: A concrete example is NTFS. The NTFS "i-node" does contain a link count, but most/all directories have a link count between 0 and 2 inclusive. The end result is that find on an NTFS volume won't actually traverse the entire hierarchy of the directories passed to it. (Those with a link count of two are not traversed at all) The fix checks the "UFSness" of the filesystem before enabling the optimisation. Reviewed By: Tim Kientzle (kientzle@) --- include/fts.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include/fts.h') diff --git a/include/fts.h b/include/fts.h index 09c4600..dbf82c9 100644 --- a/include/fts.h +++ b/include/fts.h @@ -37,6 +37,8 @@ #ifndef _FTS_H_ #define _FTS_H_ +struct _fts_private; /* implementation data */ + typedef struct { struct _ftsent *fts_cur; /* current node */ struct _ftsent *fts_child; /* linked list of children */ @@ -63,6 +65,7 @@ typedef struct { #define FTS_STOP 0x200 /* (private) unrecoverable error */ int fts_options; /* fts_open options, global flags */ void *fts_clientptr; /* thunk for sort function */ + struct _fts_private *fts_priv; /* Implementation data */ } FTS; typedef struct _ftsent { -- cgit v1.1