summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2003-05-02 13:01:28 +0000
committerJim Meyering <jim@meyering.net>2003-05-02 13:01:28 +0000
commita7c15d1cbd54a1f09b8f0e59b23edcca434b29bc (patch)
treec1e4c4daa722d87a083f4029abc5b01c1c327d03 /m4
parent4ed5c260a3b39ba5a75a8399152dc8e7599fa012 (diff)
downloadcoreutils-a7c15d1cbd54a1f09b8f0e59b23edcca434b29bc.tar.xz
(GL_FUNC_READDIR): Revive dead file. Change name to
have GL_ (not jm_) prefix. Adjust cache variables similarly. Create 500 rather than just 300 files, to exercise bug on Darwin6.5, too.
Diffstat (limited to 'm4')
-rw-r--r--m4/readdir.m431
1 files changed, 17 insertions, 14 deletions
diff --git a/m4/readdir.m4 b/m4/readdir.m4
index 03ac3312d..df48ab1ab 100644
--- a/m4/readdir.m4
+++ b/m4/readdir.m4
@@ -1,22 +1,25 @@
-#serial 4
+#serial 5
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 Detect the problem by creating a directory containing 300 files (254 not
-dnl counting . and .. is the minimum) and see if a loop doing `readdir; unlink'
-dnl removes all of them.
+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([jm_FUNC_READDIR],
+AC_DEFUN([GL_FUNC_READDIR],
[dnl
AC_REQUIRE([AC_HEADER_DIRENT])
AC_CHECK_HEADERS(string.h)
-AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
+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.
@@ -54,16 +57,16 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
# undef mkdir
static void
- create_300_file_dir (const char *dir)
+ create_N_file_dir (const char *dir, size_t n_files)
{
- int i;
+ unsigned int i;
if (mkdir (dir, 0700))
abort ();
if (chdir (dir))
abort ();
- for (i = 0; i < 300; i++)
+ for (i = 0; i < n_files; i++)
{
char file_name[4];
FILE *out;
@@ -117,15 +120,15 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
main ()
{
const char *dir = "conf-dir";
- create_300_file_dir (dir);
+ create_N_file_dir (dir, 500);
remove_dir (dir);
exit (0);
}],
- jm_cv_func_working_readdir=yes,
- jm_cv_func_working_readdir=no,
- jm_cv_func_working_readdir=no)])
+ gl_cv_func_working_readdir=yes,
+ gl_cv_func_working_readdir=no,
+ gl_cv_func_working_readdir=no)])
- if test $jm_cv_func_working_readdir = yes; then
+ 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