summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2006-09-29 15:58:04 +0000
committerJim Meyering <jim@meyering.net>2006-09-29 15:58:04 +0000
commit31c77a2fde27888aead246cde6eb88724450e5e1 (patch)
treec1416ea548d77f30a1744696cbdf061afd2fb830 /m4
parentaf46184a80169c95bd0f8115a758d293836aa444 (diff)
downloadcoreutils-31c77a2fde27888aead246cde6eb88724450e5e1.tar.xz
[ChangeLog]
Since any system may be affected by the Darwin readdir bug, perform the extra rewinddir unconditionally. The performance impact of rewinding a directory is negligible. * src/remove.c (NEED_REWIND): Define to use CONSECUTIVE_READDIR_UNLINK_THRESHOLD unconditionally. [m4/ChangeLog] * readdir.m4: Remove file once again. * jm-macros.m4: Remove reference to gl_FUNC_READDIR.
Diffstat (limited to 'm4')
-rw-r--r--m4/ChangeLog5
-rw-r--r--m4/jm-macros.m41
-rw-r--r--m4/readdir.m4139
3 files changed, 5 insertions, 140 deletions
diff --git a/m4/ChangeLog b/m4/ChangeLog
index 0d45148ed..c103d9807 100644
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-29 Jim Meyering <jim@meyering.net>
+
+ * readdir.m4: Remove file once again.
+ * jm-macros.m4: Remove reference to gl_FUNC_READDIR.
+
2006-09-28 Jim Meyering <jim@meyering.net>
* jm-macros.m4: Require the new macro.
diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4
index 199e5c782..e0188e66b 100644
--- a/m4/jm-macros.m4
+++ b/m4/jm-macros.m4
@@ -45,7 +45,6 @@ AC_DEFUN([gl_MACROS],
AC_REQUIRE([gl_PREREQ])
AC_REQUIRE([AC_FUNC_FSEEKO])
- AC_REQUIRE([gl_FUNC_READDIR])
AC_CONFIG_LIBOBJ_DIR([lib])
diff --git a/m4/readdir.m4 b/m4/readdir.m4
deleted file mode 100644
index b0a6fb436..000000000
--- a/m4/readdir.m4
+++ /dev/null
@@ -1,139 +0,0 @@
-#serial 9
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2006 Free Software
-# Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-dnl SunOS's readdir is broken in such a way that rm.c has to add extra code
-dnl to test whether a NULL return value really means there are no more files
-dnl in the directory.
-dnl
-dnl And the rm from coreutils-5.0 exposes a similar problem when there
-dnl are 338 or more files in a directory on a Darwin-6.5 system
-dnl
-dnl Detect the problem by creating a directory containing 500 files (254 not
-dnl counting . and .. is the minimum for SunOS, 338 for Darwin) and see
-dnl if a loop doing `readdir; unlink' removes all of them.
-dnl
-dnl Define HAVE_WORKING_READDIR if readdir does *not* have this problem.
-
-dnl Written by Jim Meyering.
-
-AC_DEFUN([gl_FUNC_READDIR],
-[dnl
-AC_REQUIRE([AC_HEADER_DIRENT])
-AC_CACHE_CHECK([for working readdir], gl_cv_func_working_readdir,
- [dnl
- # Arrange for deletion of the temporary directory this test creates, in
- # case the test itself fails to delete everything -- as happens on Sunos.
- ac_clean_files="$ac_clean_files conf-dir"
-
- AC_TRY_RUN(
-[# include <stdio.h>
-# include <sys/types.h>
-# include <string.h>
-
-# ifdef HAVE_DIRENT_H
-# include <dirent.h>
-# define NLENGTH(direct) (strlen((direct)->d_name))
-# else /* not HAVE_DIRENT_H */
-# define dirent direct
-# define NLENGTH(direct) ((direct)->d_namlen)
-# ifdef HAVE_SYS_NDIR_H
-# include <sys/ndir.h>
-# endif /* HAVE_SYS_NDIR_H */
-# ifdef HAVE_SYS_DIR_H
-# include <sys/dir.h>
-# endif /* HAVE_SYS_DIR_H */
-# ifdef HAVE_NDIR_H
-# include <ndir.h>
-# endif /* HAVE_NDIR_H */
-# endif /* HAVE_DIRENT_H */
-
-# define DOT_OR_DOTDOT(Basename) \
- (Basename[0] == '.' && (Basename[1] == '\0' \
- || (Basename[1] == '.' && Basename[2] == '\0')))
-
-/* Don't try to use replacement mkdir; it wouldn't resolve at link time. */
-# undef mkdir
-
- static void
- create_N_file_dir (const char *dir, size_t n_files)
- {
- unsigned int i;
-
- if (mkdir (dir, 0700))
- abort ();
- if (chdir (dir))
- abort ();
-
- for (i = 0; i < n_files; i++)
- {
- char file_name[4];
- FILE *out;
-
- sprintf (file_name, "%03d", i);
- out = fopen (file_name, "w");
- if (!out)
- abort ();
- if (fclose (out) == EOF)
- abort ();
- }
-
- if (chdir (".."))
- abort ();
- }
-
- static void
- remove_dir (const char *dir)
- {
- DIR *dirp;
-
- if (chdir (dir))
- abort ();
-
- dirp = opendir (".");
- if (dirp == NULL)
- abort ();
-
- while (1)
- {
- struct dirent *dp = readdir (dirp);
- if (dp == NULL)
- break;
-
- if (DOT_OR_DOTDOT (dp->d_name))
- continue;
-
- if (unlink (dp->d_name))
- abort ();
- }
- closedir (dirp);
-
- if (chdir (".."))
- abort ();
-
- if (rmdir (dir))
- exit (1);
- }
-
- int
- main ()
- {
- const char *dir = "conf-dir";
- create_N_file_dir (dir, 500);
- remove_dir (dir);
- exit (0);
- }],
- gl_cv_func_working_readdir=yes,
- gl_cv_func_working_readdir=no,
- gl_cv_func_working_readdir=no)])
-
- if test $gl_cv_func_working_readdir = yes; then
- AC_DEFINE(HAVE_WORKING_READDIR, 1,
- [Define if readdir is found to work properly in some unusual cases. ])
- fi
-])