Mercurial > hg > octave-nkf > gnulib-hg
changeset 17134:af797cb33018
faccessat, etc.: support AT_FDCWD-only use
* lib/at-func.c: If GNULIB_SUPPORT_ONLY_AT_FDCWD, then support
this function only if its first argument is AT_FDCWD.
Emacs wants faccessat for AT_EACCESS but not for any first-arg
values other than AT_FDCWD, so it doesn't want all the openat
machinery with fchdir etc.
* modules/faccessat, modules/fchmodat, modules/fchownat (Files):
* modules/fstatat, modules/mkdirat, modules/openat (Files):
* modules/unlinkat (Files):
Remove lib/openat-priv.h, as at-internal supplies this file.
Removing this file here allows us to support programs like Emacs
that avoid at-internal.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sun, 14 Oct 2012 22:31:28 -0700 |
parents | 229b0ba52946 |
children | 3ae14a5da4df |
files | ChangeLog lib/at-func.c modules/faccessat modules/fchmodat modules/fchownat modules/fstatat modules/mkdirat modules/openat modules/unlinkat |
diffstat | 9 files changed, 36 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2012-10-14 Paul Eggert <eggert@cs.ucla.edu> + faccessat, etc.: support AT_FDCWD-only use + * lib/at-func.c: If GNULIB_SUPPORT_ONLY_AT_FDCWD, then support + this function only if its first argument is AT_FDCWD. + Emacs wants faccessat for AT_EACCESS but not for any first-arg + values other than AT_FDCWD, so it doesn't want all the openat + machinery with fchdir etc. + * modules/faccessat, modules/fchmodat, modules/fchownat (Files): + * modules/fstatat, modules/mkdirat, modules/openat (Files): + * modules/unlinkat (Files): + Remove lib/openat-priv.h, as at-internal supplies this file. + Removing this file here allows us to support programs like Emacs + that avoid at-internal. + faccessat: speed up 'configure' on mainstream hosts * m4/faccessat.m4 (gl_PREREQ_FACCESSAT): Use AT_CHECK_FUNCS for 'access', not AC_CHECK_FUNCS_ONCE,
--- a/lib/at-func.c +++ b/lib/at-func.c @@ -17,9 +17,17 @@ /* written by Jim Meyering */ #include "dosname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ -#include "openat.h" -#include "openat-priv.h" -#include "save-cwd.h" + +#ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD +# include <errno.h> +# ifndef ENOTSUP +# define ENOTSUP EINVAL +# endif +#else +# include "openat.h" +# include "openat-priv.h" +# include "save-cwd.h" +#endif #ifdef AT_FUNC_USE_F1_COND # define CALL_FUNC(F) \ @@ -61,17 +69,22 @@ FUNC_RESULT AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) { + VALIDATE_FLAG (flag); + + if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) + return CALL_FUNC (file); + +#ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD + errno = ENOTSUP; + return FUNC_FAIL; +#else + { /* Be careful to choose names unlikely to conflict with AT_FUNC_POST_FILE_PARAM_DECLS. */ struct saved_cwd saved_cwd; int saved_errno; FUNC_RESULT err; - VALIDATE_FLAG (flag); - - if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) - return CALL_FUNC (file); - { char proc_buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (proc_buf, fd, file); @@ -125,6 +138,8 @@ if (saved_errno) errno = saved_errno; return err; + } +#endif } #undef CALL_FUNC #undef FUNC_RESULT
--- a/modules/faccessat +++ b/modules/faccessat @@ -4,7 +4,6 @@ Files: lib/faccessat.c lib/at-func.c -lib/openat-priv.h m4/faccessat.m4 Depends-on:
--- a/modules/fchmodat +++ b/modules/fchmodat @@ -4,7 +4,6 @@ Files: lib/fchmodat.c lib/at-func.c -lib/openat-priv.h m4/fchmodat.m4 Depends-on:
--- a/modules/fchownat +++ b/modules/fchownat @@ -4,7 +4,6 @@ Files: lib/fchownat.c lib/at-func.c -lib/openat-priv.h m4/fchownat.m4 Depends-on:
--- a/modules/fstatat +++ b/modules/fstatat @@ -4,7 +4,6 @@ Files: lib/fstatat.c lib/at-func.c -lib/openat-priv.h m4/fstatat.m4 m4/lstat.m4
--- a/modules/mkdirat +++ b/modules/mkdirat @@ -4,7 +4,6 @@ Files: lib/mkdirat.c lib/at-func.c -lib/openat-priv.h m4/mkdirat.m4 Depends-on: