From 964b557add9b71f98f4a8e13084374d2f24e96a8 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 7 Nov 1997 17:18:15 +0000 Subject: [PATCH] . --- m4/readdir.m4 | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 m4/readdir.m4 diff --git a/m4/readdir.m4 b/m4/readdir.m4 new file mode 100644 index 000000000..0bfc459d6 --- /dev/null +++ b/m4/readdir.m4 @@ -0,0 +1,125 @@ +#serial 1 + +dnl FIXME: describe + +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( + changequote(<<, >>)dnl + << +# include +# include +# if HAVE_STRING_H +# include +# endif + +# ifdef HAVE_DIRENT_H +# include +# 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 +# endif /* HAVE_SYS_NDIR_H */ +# ifdef HAVE_SYS_DIR_H +# include +# endif /* HAVE_SYS_DIR_H */ +# ifdef HAVE_NDIR_H +# include +# endif /* HAVE_NDIR_H */ +# endif /* HAVE_DIRENT_H */ + +# define DOT_OR_DOTDOT(Basename) \ + (Basename[0] == '.' && (Basename[1] == '\0' \ + || (Basename[1] == '.' && Basename[2] == '\0'))) + + static void + create_300_file_dir (const char *dir) + { + int i; + + if (mkdir (dir, 0700)) + exit (1); + if (chdir (dir)) + exit (1); + + for (i = 0; i < 300; i++) + { + char file_name[4]; + FILE *out; + + sprintf (file_name, "%03d", i); + out = fopen (file_name, "w"); + if (!out) + exit (1); + if (fclose (out) == EOF) + exit (1); + } + + if (chdir ("..")) + exit (1); + } + + static void + remove_dir (const char *dir) + { + DIR *dirp; + + if (chdir (dir)) + exit (1); + + dirp = opendir ("."); + if (dirp == NULL) + exit (1); + + while (1) + { + struct dirent *dp = readdir (dirp); + if (dp == NULL) + break; + + if (DOT_OR_DOTDOT (dp->d_name)) + continue; + + if (unlink (dp->d_name)) + exit (1); + } + closedir (dirp); + + if (chdir ("..")) + exit (1); + + if (rmdir (dir)) + exit (1); + } + + int + main () + { + const char *dir = "conf-dir"; + create_300_file_dir (dir); + 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) + fi +]) -- 2.11.0