X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=inline;f=lib%2Ffts_.h;h=82213fcf7dfbec4132d127c4a4933ef1b73efee5;hb=2fd7e9189c239ef737105bc085ace4dc80435533;hp=2843107ea2495c127850e4d99fab6867befaadd4;hpb=8b3f78cdd40155b5864692b63b6a368c7dabd050;p=gnulib.git
diff --git a/lib/fts_.h b/lib/fts_.h
index 2843107ea..82213fcf7 100644
--- a/lib/fts_.h
+++ b/lib/fts_.h
@@ -1,11 +1,11 @@
/* Traverse a file hierarchy.
- Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -13,8 +13,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+ along with this program. If not, see . */
/*
* Copyright (c) 1989, 1993
@@ -52,7 +51,6 @@
# ifdef _LIBC
# include
-# define _LGPL_PACKAGE 1
# else
# undef __THROW
# define __THROW
@@ -65,6 +63,7 @@
# include
# include
# include
+# include "i-ring.h"
typedef struct {
struct _ftsent *fts_cur; /* current node */
@@ -123,13 +122,25 @@ typedef struct {
through the file descriptor member, fts_cwd_fd. */
# define FTS_CWDFD 0x0200
-# define FTS_OPTIONMASK 0x03ff /* valid user option mask */
+ /* Historically, for each directory that fts initially encounters, it would
+ open it, read all entries, and stat each entry, storing the results, and
+ then it would process the first entry. But that behavior is bad for
+ locality of reference, and also causes trouble with inode-simulating
+ file systems like FAT, CIFS, FUSE-based ones, etc., when entries from
+ their name/inode cache are flushed too early.
+ Use this flag to make fts_open and fts_read defer the stat/lstat/fststat
+ of each entry until it actually processed. However, note that if you use
+ this option and also specify a comparison function, that function may not
+ examine any data via fts_statp. */
+# define FTS_DEFER_STAT 0x0400
+
+# define FTS_OPTIONMASK 0x07ff /* valid user option mask */
# define FTS_NAMEONLY 0x1000 /* (private) child names only */
# define FTS_STOP 0x2000 /* (private) unrecoverable error */
int fts_options; /* fts_open options, global flags */
-# if !_LGPL_PACKAGE
+# if GNULIB_FTS
union {
/* This data structure is used if FTS_TIGHT_CYCLE_CHECK is
specified. It records the directories between a starting
@@ -151,7 +162,12 @@ typedef struct {
but it's not appropriate for programs like du. */
struct cycle_check_state *state;
} fts_cycle;
+
# endif
+ /* A stack of the file descriptors corresponding to the
+ most-recently traversed parent directories.
+ Currently used only in FTS_CWDFD mode. */
+ I_ring fts_fd_ring;
} FTS;
typedef struct _ftsent {