"Derek R. Price" <[EMAIL PROTECTED]> writes: > Patch attached.
Thanks. I found a few other instances of checking for dirent.h, and a couple of places we need to include <sys/types.h> before <dirent.h> (this is for POSIX before 2001). I installed this into gnulib, and will propagate it into coreutils shortly. Index: lib/ChangeLog =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/ChangeLog,v retrieving revision 1.1197 diff -p -u -r1.1197 ChangeLog --- lib/ChangeLog 9 Jul 2006 10:18:17 -0000 1.1197 +++ lib/ChangeLog 11 Jul 2006 06:00:18 -0000 @@ -1,3 +1,11 @@ +2006-07-10 Derek R. Price <[EMAIL PROTECTED]> + + * backupfile.c, dirfd.h, fts.c, getcwd.c, glob.c, glob_.h: + Ignore the obsolescent !HAVE_DIRENT_H case. Consolidate NAMLEN + macros into the GNU _D_EXACT_NAMLEN. + * savedir.c: Likewise. + (savedirstream): Use _D_EXACT_NAMLEN in preference to strlen. + 2006-07-09 Jim Meyering <[EMAIL PROTECTED]> * argp-pv.c: Remove a doubled word in a comment. Index: lib/backupfile.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/backupfile.c,v retrieving revision 1.50 diff -p -u -r1.50 backupfile.c --- lib/backupfile.c 6 Jul 2006 23:29:27 -0000 1.50 +++ lib/backupfile.c 11 Jul 2006 06:00:18 -0000 @@ -41,15 +41,10 @@ #include <unistd.h> -#if HAVE_DIRENT_H -# include <dirent.h> -# define NLENGTH(direct) strlen ((direct)->d_name) -#else -# define dirent direct -# define NLENGTH(direct) ((size_t) (direct)->d_namlen) -# include <ndir.h> +#include <dirent.h> +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif - #if D_INO_IN_DIRENT # define REAL_DIR_ENTRY(dp) ((dp)->d_ino != 0) #else @@ -211,7 +206,7 @@ numbered_backup (char **buffer, size_t b size_t versionlen; size_t new_buflen; - if (! REAL_DIR_ENTRY (dp) || NLENGTH (dp) < baselen + 4) + if (! REAL_DIR_ENTRY (dp) || _D_EXACT_NAMLEN (dp) < baselen + 4) continue; if (memcmp (buf + base_offset, dp->d_name, baselen + 2) != 0) Index: lib/dirfd.h =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/dirfd.h,v retrieving revision 1.7 diff -p -u -r1.7 dirfd.h --- lib/dirfd.h 6 Jul 2006 23:29:27 -0000 1.7 +++ lib/dirfd.h 11 Jul 2006 06:00:18 -0000 @@ -19,12 +19,7 @@ #include <sys/types.h> -#if HAVE_DIRENT_H -# include <dirent.h> -#else -# define dirent direct -# include <ndir.h> -#endif +#include <dirent.h> #ifndef HAVE_DECL_DIRFD "this configure-time declaration test was not run" Index: lib/fts.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/fts.c,v retrieving revision 1.12 diff -p -u -r1.12 fts.c --- lib/fts.c 6 Jul 2006 23:29:27 -0000 1.12 +++ lib/fts.c 11 Jul 2006 06:00:18 -0000 @@ -75,17 +75,9 @@ static char sccsid[] = "@(#)fts.c 8.6 (B # include "lstat.h" #endif -#if HAVE_DIRENT_H || _LIBC -# include <dirent.h> -# ifdef _D_EXACT_NAMLEN -# define NAMLEN(dirent) _D_EXACT_NAMLEN (dirent) -# else -# define NAMLEN(dirent) strlen ((dirent)->d_name) -# endif -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# include <ndir.h> +#include <dirent.h> +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dirent) strlen ((dirent)->d_name) #endif #ifdef _LIBC @@ -829,11 +821,13 @@ fts_build (register FTS *sp, int type) if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) continue; - if ((p = fts_alloc(sp, dp->d_name, NAMLEN (dp))) == NULL) + if ((p = fts_alloc (sp, dp->d_name, + _D_EXACT_NAMLEN (dp))) == NULL) goto mem1; - if (NAMLEN (dp) >= maxlen) {/* include space for NUL */ + if (_D_EXACT_NAMLEN (dp) >= maxlen) { + /* include space for NUL */ oldaddr = sp->fts_path; - if (! fts_palloc(sp, NAMLEN (dp) + len + 1)) { + if (! fts_palloc(sp, _D_EXACT_NAMLEN (dp) + len + 1)) { /* * No more memory. Save * errno, free up the current structure and the @@ -858,7 +852,7 @@ mem1: saved_errno = errno; maxlen = sp->fts_pathlen - len; } - new_len = len + NAMLEN (dp); + new_len = len + _D_EXACT_NAMLEN (dp); if (new_len < len) { /* * In the unlikely even that we would end up Index: lib/getcwd.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/getcwd.c,v retrieving revision 1.13 diff -p -u -r1.13 getcwd.c --- lib/getcwd.c 6 Jul 2006 23:29:27 -0000 1.13 +++ lib/getcwd.c 11 Jul 2006 06:00:18 -0000 @@ -36,13 +36,7 @@ # define __set_errno(val) (errno = (val)) #endif -#if HAVE_DIRENT_H || _LIBC -# include <dirent.h> -#else -# define dirent direct -# define _D_EXACT_NAMLEN(d) (d)->d_namlen -# include <ndir.h> -#endif +#include <dirent.h> #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(d) strlen ((d)->d_name) #endif Index: lib/glob.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/glob.c,v retrieving revision 1.7 diff -p -u -r1.7 glob.c --- lib/glob.c 6 Jul 2006 23:29:27 -0000 1.7 +++ lib/glob.c 11 Jul 2006 06:00:18 -0000 @@ -47,20 +47,12 @@ # define __set_errno(val) errno = (val) #endif -#if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ -# include <dirent.h> -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# include <ndir.h> -#endif +#include <dirent.h> /* In GNU systems, <dirent.h> defines this macro for us. */ -#ifdef _D_NAMLEN -# undef NAMLEN -# define NAMLEN(d) _D_NAMLEN(d) +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dirent) strlen ((dirent)->d_name) #endif /* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available @@ -86,13 +78,6 @@ /* If the system has the `struct dirent64' type we use it internally. */ #if defined _LIBC && !defined COMPILE_GLOB64 -# if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ -# define CONVERT_D_NAMLEN(d64, d32) -# else -# define CONVERT_D_NAMLEN(d64, d32) \ - (d64)->d_namlen = (d32)->d_namlen; -# endif - # if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ # define CONVERT_D_INO(d64, d32) # else @@ -109,7 +94,6 @@ # define CONVERT_DIRENT_DIRENT64(d64, d32) \ memcpy ((d64)->d_name, (d32)->d_name, NAMLEN (d32) + 1); \ - CONVERT_D_NAMLEN (d64, d32) \ CONVERT_D_INO (d64, d32) \ CONVERT_D_TYPE (d64, d32) #endif Index: lib/glob_.h =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/glob_.h,v retrieving revision 1.5 diff -p -u -r1.5 glob_.h --- lib/glob_.h 10 Jan 2006 21:49:07 -0000 1.5 +++ lib/glob_.h 11 Jul 2006 06:00:18 -0000 @@ -46,10 +46,6 @@ #endif -#ifndef HAVE_DIRENT_H -# define dirent direct -#endif - #define glob rpl_glob #define globfree rpl_globfree #define glob_pattern_p rpl_glob_pattern_p Index: lib/savedir.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/savedir.c,v retrieving revision 1.30 diff -p -u -r1.30 savedir.c --- lib/savedir.c 6 Jul 2006 23:29:27 -0000 1.30 +++ lib/savedir.c 11 Jul 2006 06:00:19 -0000 @@ -29,11 +29,9 @@ #include <errno.h> -#if HAVE_DIRENT_H -# include <dirent.h> -#else -# define dirent direct -# include <ndir.h> +#include <dirent.h> +#ifndef _D_EXACT_NAMLEN +# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif #include <stddef.h> @@ -81,7 +79,7 @@ savedirstream (DIR *dirp) entry = dp->d_name; if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0') { - size_t entry_size = strlen (entry) + 1; + size_t entry_size = _D_EXACT_NAMLEN (dp) + 1; if (used + entry_size < used) xalloc_die (); if (allocated <= used + entry_size) Index: m4/ChangeLog =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/ChangeLog,v retrieving revision 1.867 diff -p -u -r1.867 ChangeLog --- m4/ChangeLog 11 Jul 2006 03:30:49 -0000 1.867 +++ m4/ChangeLog 11 Jul 2006 06:00:19 -0000 @@ -1,3 +1,11 @@ +2006-07-10 Derek R. Price <[EMAIL PROTECTED]> + and Paul Eggert <[EMAIL PROTECTED]> + + * backupfile.m4, d-ino.m4, d-type.m4, dirfd.m4, fts.m4, getcwd.m4: + * savedir.m4: + Ignore the obsolescent !HAVE_DIRENT_H case. Consolidate NAMLEN + macros into the GNU _D_EXACT_NAMLEN. + 2006-07-10 Paul Eggert <[EMAIL PROTECTED]> * stdint.m4 (gl_STDINT_H): Like yesterday's change to Index: m4/backupfile.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/backupfile.m4,v retrieving revision 1.11 diff -p -u -r1.11 backupfile.m4 --- m4/backupfile.m4 6 Jul 2006 23:29:27 -0000 1.11 +++ m4/backupfile.m4 11 Jul 2006 06:00:19 -0000 @@ -1,4 +1,4 @@ -# backupfile.m4 serial 10 +# backupfile.m4 serial 11 dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -10,7 +10,6 @@ AC_DEFUN([gl_BACKUPFILE], AC_LIBOBJ([backupfile]) dnl Prerequisites of lib/backupfile.c. - AC_CHECK_HEADERS_ONCE([dirent.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) AC_REQUIRE([gl_AC_DOS]) AC_REQUIRE([AC_SYS_LONG_FILE_NAMES]) Index: m4/d-ino.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/d-ino.m4,v retrieving revision 1.9 diff -p -u -r1.9 d-ino.m4 --- m4/d-ino.m4 6 Jul 2006 23:29:27 -0000 1.9 +++ m4/d-ino.m4 11 Jul 2006 06:00:19 -0000 @@ -13,18 +13,12 @@ dnl # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO], - [AC_CHECK_HEADERS_ONCE([dirent.h])dnl - AC_CACHE_CHECK([for d_ino member in directory struct], + [AC_CACHE_CHECK([for d_ino member in directory struct], jm_cv_struct_dirent_d_ino, [AC_TRY_LINK(dnl [ #include <sys/types.h> -#ifdef HAVE_DIRENT_H -# include <dirent.h> -#else -# define dirent direct -# include <ndir.h> -#endif +#include <dirent.h> ], [struct dirent dp; dp.d_ino = 0;], Index: m4/d-type.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/d-type.m4,v retrieving revision 1.10 diff -p -u -r1.10 d-type.m4 --- m4/d-type.m4 6 Jul 2006 23:29:27 -0000 1.10 +++ m4/d-type.m4 11 Jul 2006 06:00:19 -0000 @@ -13,18 +13,12 @@ dnl # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE], - [AC_CHECK_HEADERS_ONCE([dirent.h])dnl - AC_CACHE_CHECK([for d_type member in directory struct], + [AC_CACHE_CHECK([for d_type member in directory struct], jm_cv_struct_dirent_d_type, [AC_TRY_LINK(dnl [ #include <sys/types.h> -#ifdef HAVE_DIRENT_H -# include <dirent.h> -#else -# define dirent direct -# include <ndir.h> -#endif +#include <dirent.h> ], [struct dirent dp; dp.d_type = 0;], Index: m4/dirfd.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/dirfd.m4,v retrieving revision 1.20 diff -p -u -r1.20 dirfd.m4 --- m4/dirfd.m4 6 Jul 2006 23:29:27 -0000 1.20 +++ m4/dirfd.m4 11 Jul 2006 06:00:19 -0000 @@ -1,4 +1,4 @@ -#serial 12 -*- Autoconf -*- +#serial 13 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. @@ -17,22 +17,16 @@ AC_DEFUN([gl_FUNC_DIRFD], dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. AC_REQUIRE([AC_PROG_CPP]) AC_REQUIRE([AC_PROG_EGREP]) - AC_CHECK_HEADERS_ONCE([dirent.h])dnl - - dirfd_headers=' -#if HAVE_DIRENT_H -# include <dirent.h> -#else -# define dirent direct -# include <ndir.h> -#endif -' AC_CHECK_FUNCS(dirfd) - AC_CHECK_DECLS([dirfd], , , $dirfd_headers) + AC_CHECK_DECLS([dirfd], , , + [#include <sys/types.h> + #include <dirent.h>]) AC_CACHE_CHECK([whether dirfd is a macro], gl_cv_func_dirfd_macro, - [AC_EGREP_CPP([dirent_header_defines_dirfd], [$dirfd_headers + [AC_EGREP_CPP([dirent_header_defines_dirfd], [ +#include <sys/types.h> +#include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif], @@ -53,8 +47,8 @@ AC_DEFUN([gl_FUNC_DIRFD], CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" AC_TRY_COMPILE( - [$dirfd_headers - ], + [#include <sys/types.h> + #include <dirent.h>], [DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;], dir_fd_found=yes ) Index: m4/fts.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/fts.m4,v retrieving revision 1.7 diff -p -u -r1.7 fts.m4 --- m4/fts.m4 6 Jul 2006 23:29:27 -0000 1.7 +++ m4/fts.m4 11 Jul 2006 06:00:19 -0000 @@ -1,4 +1,4 @@ -#serial 7 +#serial 9 dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -29,5 +29,5 @@ AC_DEFUN([gl_FUNC_FTS_CORE], dnl Prerequisites of lib/fts.c. # Checks for header files. - AC_CHECK_HEADERS_ONCE([dirent.h sys/param.h])dnl + AC_CHECK_HEADERS_ONCE([sys/param.h])dnl ]) Index: m4/getcwd.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/getcwd.m4,v retrieving revision 1.11 diff -p -u -r1.11 getcwd.m4 --- m4/getcwd.m4 6 Jul 2006 23:29:27 -0000 1.11 +++ m4/getcwd.m4 11 Jul 2006 06:00:19 -0000 @@ -61,7 +61,6 @@ AC_DEFUN([gl_FUNC_GETCWD], AC_DEFUN([gl_PREREQ_GETCWD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_CHECK_HEADERS_ONCE([dirent.h])dnl AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) : ]) Index: m4/glob.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/glob.m4,v retrieving revision 1.7 diff -p -u -r1.7 glob.m4 --- m4/glob.m4 9 Jul 2006 10:18:17 -0000 1.7 +++ m4/glob.m4 11 Jul 2006 06:00:19 -0000 @@ -1,4 +1,4 @@ -# glob.m4 serial 4 +# glob.m4 serial 5 dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -74,7 +74,6 @@ if (glob ("conf*-globtest", 0, NULL, &fo AC_DEFUN([gl_PREREQ_GLOB], [ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])dnl AC_REQUIRE([AC_GNU_SOURCE])dnl - AC_CHECK_HEADERS_ONCE([dirent.h])dnl AC_CHECK_HEADERS_ONCE([sys/cdefs.h unistd.h])dnl AC_CHECK_FUNCS_ONCE([getlogin_r getpwnam_r])dnl :]) Index: m4/savedir.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/savedir.m4,v retrieving revision 1.6 diff -p -u -r1.6 savedir.m4 --- m4/savedir.m4 6 Jul 2006 23:29:27 -0000 1.6 +++ m4/savedir.m4 11 Jul 2006 06:00:19 -0000 @@ -1,4 +1,4 @@ -# savedir.m4 serial 7 +# savedir.m4 serial 8 dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -8,7 +8,4 @@ AC_DEFUN([gl_SAVEDIR], [ AC_LIBSOURCES([savedir.c, savedir.h]) AC_LIBOBJ([savedir]) - - dnl Prerequisites of lib/savedir.c. - AC_CHECK_HEADERS_ONCE([dirent.h])dnl ])