(AUTOMAKE_OPTIONS): Use ansi2knr so *I* don't
[gnulib.git] / m4 / readdir.m4
index 0bfc459..d2b1a55 100644 (file)
@@ -1,13 +1,28 @@
 #serial 1
 
-dnl FIXME: describe
+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
+dnl Define HAVE_WORKING_READDIR if readdir does *not* have this problem.
+
+dnl Written by Jim Meyering.
 
 AC_DEFUN(jm_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_TRY_RUN(
+  [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 <stdio.h>
@@ -43,9 +58,9 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
       int i;
 
       if (mkdir (dir, 0700))
-       exit (1);
+       abort ();
       if (chdir (dir))
-       exit (1);
+       abort ();
 
       for (i = 0; i < 300; i++)
        {
@@ -55,13 +70,13 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
          sprintf (file_name, "%03d", i);
          out = fopen (file_name, "w");
          if (!out)
-           exit (1);
+           abort ();
          if (fclose (out) == EOF)
-           exit (1);
+           abort ();
        }
 
       if (chdir (".."))
-       exit (1);
+       abort ();
     }
 
     static void
@@ -70,11 +85,11 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
       DIR *dirp;
 
       if (chdir (dir))
-       exit (1);
+       abort ();
 
       dirp = opendir (".");
       if (dirp == NULL)
-       exit (1);
+       abort ();
 
       while (1)
        {
@@ -86,12 +101,12 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
            continue;
 
          if (unlink (dp->d_name))
-           exit (1);
+           abort ();
        }
       closedir (dirp);
 
       if (chdir (".."))
-       exit (1);
+       abort ();
 
       if (rmdir (dir))
        exit (1);
@@ -118,6 +133,7 @@ AC_CACHE_CHECK([for working readdir], jm_cv_func_working_readdir,
     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)