diff lib/fts.c @ 5867:67b499052f7f

* 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.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 18 May 2005 19:47:06 +0000
parents 942c4d17dd7d
children fab6701e5cb2
line wrap: on
line diff
--- a/lib/fts.c	Wed May 18 19:46:16 2005 +0000
+++ b/lib/fts.c	Wed May 18 19:47:06 2005 +0000
@@ -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 <sys/param.h>
 #endif
@@ -64,9 +66,10 @@
 #include <fcntl.h>
 #include <errno.h>
 #include "dirfd.h"
-#include "fts_.h"
-#include "intprops.h"
+#include "cycle-check.h"
+#include "hash.h"
 #include "unistd-safer.h"
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -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