⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readdir.m4

📁 Linux下文件工具。
💻 M4
字号:
#serial 4dnl SunOS's readdir is broken in such a way that rm.c has to add extra codednl to test whether a NULL return value really means there are no more filesdnl in the directory.dnldnl Detect the problem by creating a directory containing 300 files (254 notdnl counting . and .. is the minimum) and see if a loop doing `readdir; unlink'dnl removes all of them.dnldnl Define HAVE_WORKING_READDIR if readdir does *not* have this problem.dnl Written by Jim Meyering.AC_DEFUN([jm_FUNC_READDIR],[dnlAC_REQUIRE([AC_HEADER_DIRENT])AC_CHECK_HEADERS(string.h)AC_CACHE_CHECK([for working readdir], jm_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>#   if HAVE_STRING_H#    include <string.h>#   endif#   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_300_file_dir (const char *dir)    {      int i;      if (mkdir (dir, 0700))	abort ();      if (chdir (dir))	abort ();      for (i = 0; i < 300; 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_300_file_dir (dir);      remove_dir (dir);      exit (0);    }],  jm_cv_func_working_readdir=yes,  jm_cv_func_working_readdir=no,  jm_cv_func_working_readdir=no)])  if test $jm_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])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -