Paul Eggert [Fri, 20 May 2005 22:34:19 +0000 (22:34 +0000)]
Don't include "cycle-check.h" or "hash.h".
(setup_dir, free_dir): New functions.
(enter_dir, leave_dir): Define trivial
alternatives of _LGPL_PACKAGE. Move to fts-cycle.c if !_LGPL_PACKAGE.
(HT_INITIAL_SIZE, ENTER_DIR): Remove. All uses removed.
(LEAVE_DIR): Fix typo: pass Fts and Ent to leave_dir.
(struct Active_dir, AD_compare, AD_hash, enter_dir, leave_dir):
Move to fts-cycle.c.
(fts_open): Use setup_dir.
(fts_close): Use free_dir.
(fts_read): Have just one copy of the ENTER_DIR code rather than three.
This adds a label and some gotos, but the alternatives were messier.
Check for memory allocation failure when entering a dir.
(fts_stat) [_LGPL_PACKAGE]: Bring back glibc cycle detection code.
Paul Eggert [Fri, 20 May 2005 22:33:59 +0000 (22:33 +0000)]
(_LGPL_PACKAGE) [defined _LIBC]: New macro.
(FTS): New member fts_cycle, that is a union that contains the
old active_dir_ht and cycle_state. All uses changed to mention
fts_cycle.ht and fts_cycle.state.
Paul Eggert [Fri, 20 May 2005 22:32:50 +0000 (22:32 +0000)]
New file, containing GPL'ed code migrated out of
fts.c, with the following changes:
(setup_dir, free_dir): New functions.
(enter_dir): Now returns bool. Return true if successful, false
if memory exhausted. All callers changed.
Do not bother partly cleaning up on
memory allocation failure; that is free_dir's job.
However, free ad if hash_insert fails, to avoid memory leak.
(enter_dir, leave_dir): Accommodate change to FTS by inspecting
fts->fts_options to see which union member to use.
Paul Eggert [Wed, 18 May 2005 19:31:20 +0000 (19:31 +0000)]
lib-check.m4: Add copyright notice.
(cu_LIB_CHECK): Renamed from gl_LIB_CHECK.
Don't check for sqrt; factor no longer needs it.
Revamp tests for floor, modf, rint, to define SEQ_LIBM.
Redo tests for fesetround to act like the other wons.
Use "cu_saved_libs" for local var name, not "ac_su_saved_lib".
Paul Eggert [Wed, 18 May 2005 19:31:00 +0000 (19:31 +0000)]
(gl_MACROS): Require AC_FUNC_LSTAT.
Don't check for memcpy, strchr, strerror, strrchr, float.h.
Use AC_REQUIRE on AM_LANGINFO_CODESET and gl_GLIBC21 rather
than invoking them directly.
(gl_CHECK_ALL_HEADERS): Don't check for errno.h, float.h,
limits.h, stddef.h, since we assume C89 now.
Paul Eggert [Wed, 18 May 2005 19:30:06 +0000 (19:30 +0000)]
(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.
Paul Eggert [Wed, 18 May 2005 19:29:11 +0000 (19:29 +0000)]
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.
Paul Eggert [Wed, 18 May 2005 19:28:48 +0000 (19:28 +0000)]
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.
Paul Eggert [Wed, 18 May 2005 19:28:21 +0000 (19:28 +0000)]
Include canonicalize.h first, to test interface.
Include <stddef.h> unconditionally, since we assume C89 now.
All uses of PTR_INT_TYPE replaced by ptrdiff_t.
Jim Meyering [Fri, 13 May 2005 07:39:50 +0000 (07:39 +0000)]
* NEWS: `rm -r' now removes all of the files it should, even on
systems with a buggy readdir affecting file systems inaccessible
at configure time.
In some unusual circumstances `rm -r' would fail to remove --
or even consider -- all entries in a directory with more than 254
(SunOS) or 338 (Darwin) entries. This could cause trouble even on
other types of systems when using an affected file system via e.g.,
NFS. The underlying cause was a bug in readdir on those systems.
Coreutils-5.2.1 and earlier used a configure-time test designed
to detect precisely those problem systems, but it would detect
the problem and enable remove.c's work-around code only when its
configure-time test was run on a losing file system. Obviously,
it couldn't detect a problem if the offending file system wasn't
tested or even mounted at coreutils configure time. Now, rm itself
performs a minimal-cost run-time test to detect the problem.
(CONSECUTIVE_READDIR_UNLINK_THRESHOLD): Define.
(remove_cwd_entries): When readdir returns NULL for a directory from
which we've removed more than CONSECUTIVE_READDIR_UNLINK_THRESHOLD
entries, call rewinddir and then resume the readdir/unlink loop.
(UNLINK_CAN_UNLINK_DIRS): Rename from ROOT_CAN_UNLINK_DIRS.