X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Freaddir.m4;h=db645ecc5e23ebd8ed66e0cd4f5673ff11dd51bf;hb=ab925242c495050cda536f918ff4d5118798505a;hp=d2b1a557e121dca3b90dbaf10d4bc5d2001ae518;hpb=a1cb8a103a575946f566af25b0f67aca9449700c;p=gnulib.git diff --git a/m4/readdir.m4 b/m4/readdir.m4 index d2b1a557e..db645ecc5 100644 --- a/m4/readdir.m4 +++ b/m4/readdir.m4 @@ -1,35 +1,33 @@ -#serial 1 +#serial 7 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. ac_clean_files="$ac_clean_files conf-dir" AC_TRY_RUN( - changequote(<<, >>)dnl - << -# include +[# include # include -# if HAVE_STRING_H -# include -# endif +# include # ifdef HAVE_DIRENT_H # include @@ -52,17 +50,20 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir, (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_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; @@ -116,26 +117,16 @@ 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); - } - >>, - changequote([, ])dnl - jm_cv_func_working_readdir=yes, - jm_cv_func_working_readdir=no, - jm_cv_func_working_readdir=no)]) - - if test x = y; then - dnl This code is deliberately never run via ./configure. - dnl FIXME: this is a gross hack to make autoheader put an entry - dnl for this HAVE_-prefixed symbol in config.h.in. - AC_CHECK_FUNCS(WORKING_READDIR) - fi - - - if test $jm_cv_func_working_readdir = yes; then - ac_kludge=HAVE_WORKING_READDIR - AC_DEFINE_UNQUOTED($ac_kludge) + }], + 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 ])