Hi Jim, The next split-off from module 'openat' is 'fchmodat'. Here's the proposed patch. Tested on a number of platforms.
2011-11-01 Bruno Haible <br...@clisp.org> New module 'fchmodat', split off from module 'openat'. * lib/openat.h (chmodat, lchmodat): Enable only if GNULIB_FCHMODAT is defined. * m4/fchmodat.m4: New file, extracted from m4/openat.m4. * m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FCHMODAT. Don't test for fchmodat, lchmod. Don't set HAVE_FCHMODAT. * modules/fchmodat: New file, extracted from modules/openat. * modules/openat (Files): Remove lib/fchmodat.c. (configure.ac): Remove AC_LIBOBJ of fchmodat. * modules/fchmodat-tests: New file, extracted from modules/openat-tests. * modules/openat-tests (Files): Remove tests/test-fchmodat.c. (Makefile.am): Remove rules for test-fchmodat. * doc/posix-functions/fchmodat.texi: Mention module 'fchmodat' instead of module 'openat'. * NEWS: Mention the change. ================================ m4/fchmodat.m4 ================================ # fchmodat.m4 serial 1 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_FCHMODAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([fchmodat lchmod]) if test $ac_cv_func_fchmodat != yes; then HAVE_FCHMODAT=0 fi ]) =============================== modules/fchmodat =============================== Description: fchmodat() function: Change access permissions of a file at a directory. Files: lib/fchmodat.c lib/at-func.c lib/openat.h lib/openat-priv.h m4/fchmodat.m4 Depends-on: dirent dosname errno extensions fchdir fcntl-h openat save-cwd stdbool sys_stat unistd configure.ac: gl_FUNC_FCHMODAT if test $HAVE_FCHMODAT = 0; then AC_LIBOBJ([fchmodat]) fi AC_REQUIRE([AC_C_INLINE]) dnl because 'inline' is used in lib/openat.h gl_MODULE_INDICATOR([fchmodat]) dnl for lib/openat.h gl_SYS_STAT_MODULE_INDICATOR([fchmodat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake ============================ modules/fchmodat-tests ============================ Files: tests/test-fchmodat.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fchmodat check_PROGRAMS += test-fchmodat test_fchmodat_LDADD = $(LDADD) @LIBINTL@ ================================================================================ --- NEWS.orig Tue Nov 1 19:04:42 2011 +++ NEWS Tue Nov 1 16:19:30 2011 @@ -12,6 +12,10 @@ Date Modules Changes +2011-11-01 openat This module no longer provides the fchmodat() + function. If you need this function, you now need + to request the 'fchmodat' module. + 2011-11-01 alignof This module no longer provides the alignof() macro. Use either alignof_slot() or alignof_type() instead. --- doc/posix-functions/fchmodat.texi.orig Tue Nov 1 19:04:42 2011 +++ doc/posix-functions/fchmodat.texi Tue Nov 1 16:19:01 2011 @@ -4,7 +4,7 @@ POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html} -Gnulib module: openat +Gnulib module: fchmodat Portability problems fixed by Gnulib: @itemize --- lib/openat.h.orig Tue Nov 1 19:04:42 2011 +++ lib/openat.h Tue Nov 1 16:20:02 2011 @@ -64,6 +64,8 @@ #endif +#if GNULIB_FCHMODAT + static inline int chmodat (int fd, char const *file, mode_t mode) { @@ -76,6 +78,8 @@ return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); } +#endif + static inline int statat (int fd, char const *name, struct stat *st) { --- m4/openat.m4.orig Tue Nov 1 19:04:42 2011 +++ m4/openat.m4 Tue Nov 1 16:22:37 2011 @@ -1,4 +1,4 @@ -# serial 38 +# serial 39 # See if we need to use our replacement for Solaris' openat et al functions. dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. @@ -14,7 +14,6 @@ GNULIB_OPENAT=1 AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - GNULIB_FCHMODAT=1 GNULIB_FSTATAT=1 GNULIB_MKDIRAT=1 @@ -22,7 +21,7 @@ GNULIB_UNLINKAT=1 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_CHECK_FUNCS_ONCE([fchmodat lchmod mkdirat openat unlinkat]) + AC_CHECK_FUNCS_ONCE([mkdirat openat unlinkat]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([gl_FUNC_UNLINK]) case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink in @@ -42,9 +41,6 @@ HAVE_UNLINKAT=0 # No known system with unlinkat but not openat gl_PREREQ_OPENAT;; esac - if test $ac_cv_func_fchmodat != yes; then - HAVE_FCHMODAT=0 - fi if test $ac_cv_func_mkdirat != yes; then HAVE_MKDIRAT=0 fi --- modules/openat.orig Tue Nov 1 19:04:42 2011 +++ modules/openat Tue Nov 1 16:35:10 2011 @@ -3,7 +3,6 @@ Files: lib/at-func.c -lib/fchmodat.c lib/fstatat.c lib/mkdirat.c lib/openat.c @@ -39,9 +38,6 @@ configure.ac: gl_FUNC_OPENAT AC_LIBOBJ([openat-proc]) -if test $HAVE_FCHMODAT = 0; then - AC_LIBOBJ([fchmodat]) -fi if test $ac_cv_func_fstatat = no || test $REPLACE_FSTATAT = 1; then AC_LIBOBJ([fstatat]) fi --- modules/openat-tests.orig Tue Nov 1 19:04:42 2011 +++ modules/openat-tests Tue Nov 1 19:04:37 2011 @@ -8,7 +8,6 @@ tests/test-mkdirat.c tests/test-openat.c tests/test-unlinkat.c -tests/test-fchmodat.c tests/signature.h tests/macros.h @@ -23,10 +22,9 @@ Makefile.am: TESTS += \ - test-fchmodat test-fstatat test-mkdirat test-openat test-unlinkat + test-fstatat test-mkdirat test-openat test-unlinkat check_PROGRAMS += \ - test-fchmodat test-fstatat test-mkdirat test-openat test-unlinkat -test_fchmodat_LDADD = $(LDADD) @LIBINTL@ + test-fstatat test-mkdirat test-openat test-unlinkat test_fstatat_LDADD = $(LDADD) @LIBINTL@ test_mkdirat_LDADD = $(LDADD) @LIBINTL@ test_openat_LDADD = $(LDADD) @LIBINTL@ -- In memoriam Stefano Peluffo <http://www.marxists.org/history/international/comintern/sections/italy/1944/partisans.htm>