faccessat, etc.: support AT_FDCWD-only use
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 15 Oct 2012 05:31:28 +0000 (22:31 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 15 Oct 2012 05:54:06 +0000 (22:54 -0700)
* 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.

ChangeLog
lib/at-func.c
modules/faccessat
modules/fchmodat
modules/fchownat
modules/fstatat
modules/mkdirat
modules/openat
modules/unlinkat

index e340e84..45637f3 100644 (file)
--- 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,
index b25bc4d..481eea4 100644 (file)
 /* 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)                           \
 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 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
   if (saved_errno)
     errno = saved_errno;
   return err;
+  }
+#endif
 }
 #undef CALL_FUNC
 #undef FUNC_RESULT
index 768ec13..ee4f2a5 100644 (file)
@@ -4,7 +4,6 @@ faccessat() function: check user's permissions for a file.
 Files:
 lib/faccessat.c
 lib/at-func.c
-lib/openat-priv.h
 m4/faccessat.m4
 
 Depends-on:
index 94fad77..44cc919 100644 (file)
@@ -4,7 +4,6 @@ fchmodat() function: Change access permissions of a file at a directory.
 Files:
 lib/fchmodat.c
 lib/at-func.c
-lib/openat-priv.h
 m4/fchmodat.m4
 
 Depends-on:
index 7fba3ed..0b16be8 100644 (file)
@@ -4,7 +4,6 @@ fchownat() function: Change the owner of a file at a directory.
 Files:
 lib/fchownat.c
 lib/at-func.c
-lib/openat-priv.h
 m4/fchownat.m4
 
 Depends-on:
index 69e9a7b..9b260d4 100644 (file)
@@ -4,7 +4,6 @@ fstatat() function: Return information about a file at a directory.
 Files:
 lib/fstatat.c
 lib/at-func.c
-lib/openat-priv.h
 m4/fstatat.m4
 m4/lstat.m4
 
index 0108920..0fe638a 100644 (file)
@@ -4,7 +4,6 @@ mkdirat() function: Create a directory relative to a given directory.
 Files:
 lib/mkdirat.c
 lib/at-func.c
-lib/openat-priv.h
 m4/mkdirat.m4
 
 Depends-on:
index 7846401..0db086a 100644 (file)
@@ -3,7 +3,6 @@ openat() function: Open a file at a directory.
 
 Files:
 lib/openat.c
-lib/openat-priv.h
 m4/openat.m4
 m4/lstat.m4
 m4/mode_t.m4
index 4a7b87e..97e201c 100644 (file)
@@ -4,7 +4,6 @@ unlinkat() function: Remove a file at a directory.
 Files:
 lib/unlinkat.c
 lib/at-func.c
-lib/openat-priv.h
 m4/unlinkat.m4
 m4/lstat.m4