# HG changeset patch # User Paul Eggert # Date 1116445626 0 # Node ID 67b499052f7f78abe343657bddcddcc3af8f9be6 # Parent d284693d309ce4d57d3f9187ef5d6b424c6cef28 * fts.c: Include fts_.h first, to check interface. Do not include intprops.h; no longer needed. Include cycle-check.h and hash.h, since fts_.h no longer does. Remove unnecessary casts of closedir to void. (fts_build): Use a simpler method (not involving TYPE_SIGNED) to decide whether to decrement nlinks. * fts_.h: Do not include hash.h or cycle-check.h; no longer needed. (FTS): Use struct hash_table * instead of Hash_table, so that we no longer need to include hash.h here. * fts.m4 (gl_FUNC_FTS): Don't require AC_HEADER_STDC, as we don't use its results. Don't check for fcntl.h, stddef.h, stdlib.h, string.h, unistd.h, since we include them unconditionally. Don't require AM_STDBOOL_H, since stdbool is a prerequisite. Don't require AC_C_CONST, AC_TYPE_SIZE_T or check for ptrdiff_t since we assume C89 or better. Don't require AC_FUNC_CLOSEDIR_VOID, AC_FUNC_LSTAT, or AC_FUNC_STAT, as we don't use their results. Don't check for fchdir, memmove, memset, strrchr, as we use them unconditionally. diff --git a/lib/fts.c b/lib/fts.c --- a/lib/fts.c +++ b/lib/fts.c @@ -53,6 +53,8 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; #endif /* LIBC_SCCS and not lint */ +#include "fts_.h" + #if HAVE_SYS_PARAM_H || defined _LIBC # include #endif @@ -64,9 +66,10 @@ #include #include #include "dirfd.h" -#include "fts_.h" -#include "intprops.h" +#include "cycle-check.h" +#include "hash.h" #include "unistd-safer.h" +#include #include #include #include @@ -926,7 +929,7 @@ cur->fts_flags |= FTS_DONTCHDIR; descend = false; cderrno = errno; - (void)closedir(dirp); + closedir(dirp); dirp = NULL; } else descend = true; @@ -976,7 +979,7 @@ if (p) free(p); fts_lfree(head); - (void)closedir(dirp); + closedir(dirp); cur->fts_info = FTS_ERR; SET(FTS_STOP); __set_errno (saved_errno); @@ -1001,7 +1004,7 @@ */ free(p); fts_lfree(head); - (void)closedir(dirp); + closedir(dirp); cur->fts_info = FTS_ERR; SET(FTS_STOP); __set_errno (ENAMETOOLONG); @@ -1043,11 +1046,9 @@ p->fts_info = fts_stat(sp, p, false); /* Decrement link count if applicable. */ - if (nlinks > 0 - && (TYPE_SIGNED (nlink_t) || nostat) - && (p->fts_info == FTS_D || + if (nlinks > 0 && (p->fts_info == FTS_D || p->fts_info == FTS_DC || p->fts_info == FTS_DOT)) - --nlinks; + nlinks -= nostat; } /* We walk in directory order so "ls -f" doesn't get upset. */ @@ -1061,7 +1062,7 @@ ++nitems; } if (dirp) - (void)closedir(dirp); + closedir(dirp); /* * If realloc() changed the address of the path, adjust the diff --git a/lib/fts_.h b/lib/fts_.h --- a/lib/fts_.h +++ b/lib/fts_.h @@ -63,8 +63,7 @@ # include # include -# include "hash.h" -# include "cycle-check.h" +# include typedef struct { struct _ftsent *fts_cur; /* current node */ @@ -116,7 +115,7 @@ and promptly even when the depth of a hierarchy is in the tens of thousands. Lazy checking, as done by GNU rm via cycle-check.c, wouldn't be appropriate for du. */ - Hash_table *active_dir_ht; + struct hash_table *active_dir_ht; struct cycle_check_state *cycle_state; } FTS; diff --git a/m4/fts.m4 b/m4/fts.m4 --- a/m4/fts.m4 +++ b/m4/fts.m4 @@ -6,7 +6,7 @@ AC_DEFUN([gl_FUNC_FTS], [ - AC_LIBSOURCES([fts.c, fts_.h, intprops.h]) + AC_LIBSOURCES([fts.c, fts_.h]) dnl Use this version of fts unconditionally, since the GNU libc and dnl NetBSD versions have bugs and/or unnecessary limitations. @@ -16,21 +16,12 @@ # Checks for header files. AC_REQUIRE([AC_HEADER_DIRENT]) - AC_REQUIRE([AC_HEADER_STDC]) - AC_CHECK_HEADERS_ONCE([fcntl.h inttypes.h stddef.h stdint.h]) - AC_CHECK_HEADERS_ONCE([stdlib.h string.h sys/param.h unistd.h]) + AC_CHECK_HEADERS_ONCE([inttypes.h stdint.h]) + AC_CHECK_HEADERS_ONCE([sys/param.h]) # Checks for typedefs, structures, and compiler characteristics. - AC_REQUIRE([AM_STDBOOL_H]) - AC_REQUIRE([AC_C_CONST]) - AC_REQUIRE([AC_TYPE_SIZE_T]) AC_REQUIRE([gt_INTTYPES_PRI]) - AC_CHECK_TYPES([ptrdiff_t]) # Checks for library functions. - AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID]) - AC_REQUIRE([AC_FUNC_LSTAT]) AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) - AC_REQUIRE([AC_FUNC_STAT]) - AC_CHECK_FUNCS_ONCE([fchdir memmove memset strrchr]) ])