]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
tests: adapt AT_FDCWD fix for more tests
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 1 Sep 2025 20:04:21 +0000 (13:04 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 1 Sep 2025 20:05:46 +0000 (13:05 -0700)
* tests/test-areadlinkat-with-size.c (main):
* tests/test-areadlinkat.c (main):
* tests/test-faccessat.c (main):
* tests/test-fchmodat.c (main):
* tests/test-fchownat.c (main):
* tests/test-fstatat.c (main):
* tests/test-linkat.c (main):
* tests/test-mkdirat.c (main):
* tests/test-mkfifoat.c (main):
* tests/test-openat-safer.c (main):
* tests/test-readlinkat.c (main):
* tests/test-renameat.c (main):
* tests/test-renameatu.c (main):
* tests/test-symlinkat.c (main):
* tests/test-unlinkat.c (main):
* tests/test-utimensat.c (main):
Work even if AT_FDCWD == -1.

18 files changed:
ChangeLog
doc/posix-headers/fcntl.texi
tests/test-areadlinkat-with-size.c
tests/test-areadlinkat.c
tests/test-faccessat.c
tests/test-fchmodat.c
tests/test-fchownat.c
tests/test-fstatat.c
tests/test-linkat.c
tests/test-mkdirat.c
tests/test-mkfifoat.c
tests/test-openat-safer.c
tests/test-readlinkat.c
tests/test-renameat.c
tests/test-renameatu.c
tests/test-symlinkat.c
tests/test-unlinkat.c
tests/test-utimensat.c

index 0e3d2c7f1eece9fa65a30c0abf6ca6cfdd774973..d8950512dbbd2c592c7796559f5a0725f8b49a2b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,24 @@
 2025-09-01  Paul Eggert  <eggert@cs.ucla.edu>
 
-       openat2-tests: fix AT_FDCWD portability
-       * tests/test-openat.c (main): Work even if AT_FDCWD == -1.
+       tests: more fixes for AT_FDCWD portability
+       * tests/test-areadlinkat-with-size.c (main):
+       * tests/test-areadlinkat.c (main):
+       * tests/test-faccessat.c (main):
+       * tests/test-fchmodat.c (main):
+       * tests/test-fchownat.c (main):
+       * tests/test-fstatat.c (main):
+       * tests/test-linkat.c (main):
+       * tests/test-mkdirat.c (main):
+       * tests/test-mkfifoat.c (main):
+       * tests/test-openat.c (main):
+       * tests/test-openat-safer.c (main):
+       * tests/test-readlinkat.c (main):
+       * tests/test-renameat.c (main):
+       * tests/test-renameatu.c (main):
+       * tests/test-symlinkat.c (main):
+       * tests/test-unlinkat.c (main):
+       * tests/test-utimensat.c (main):
+       Work even if AT_FDCWD == -1.
 
 2025-08-31  Collin Funk  <collin.funk1@gmail.com>
 
index 354bae0193ea68a7428056567207215edeaa99f4..16ea70cadb6a6ddee82a200906bed26e2f163d76 100644 (file)
@@ -151,9 +151,10 @@ mingw, MSVC 14.
 defined on some platforms.
 
 @item
-POSIX allows @samp{AT_FDCWD} to be @minus{}1.
-Even though @samp{AT_FDCWD} is less than @minus{}1 on all
-known practical platforms,
-it is better to not assume that @minus{}1 is an invalid argument
-to functions like @samp{openat}.
+POSIX allows @samp{AT_FDCWD} to be @minus{}1, so it is unsafe to use
+@samp{AT_FDCWD} as an invalid directory file descriptor argument to
+functions like @samp{openat}.
+Instead, you can use @samp{AT_FDCWD == -1 ? -2 : -1}.
+@samp{AT_FDCWD} is @minus{}1 on some platforms:
+Haiku R1/Beta4.
 @end itemize
index 2fd7c7d00441673ca12c3a63e4ed3227a100594d..89f9acf1cd8c6304e7d03695fff2c4ded316b793 100644 (file)
@@ -73,7 +73,8 @@ main (void)
       ASSERT (strcmp (buf, "nowhere") == 0);
       free (buf);
       errno = 0;
-      ASSERT (areadlinkat_with_size (-1, BASE "link", 1) == NULL);
+      ASSERT (areadlinkat_with_size (AT_FDCWD == -1 ? -2 : -1, BASE "link", 1)
+              == NULL);
       ASSERT (errno == EBADF);
       errno = 0;
       ASSERT (areadlinkat_with_size (AT_FDCWD, BASE "link", 1) == NULL);
index 503304a56d57284fbaa9790551026f6e4ae7171a..1fea12faf594aeea6f77ce79572c2343cf702dc6 100644 (file)
@@ -73,7 +73,7 @@ main (void)
       ASSERT (strcmp (buf, "nowhere") == 0);
       free (buf);
       errno = 0;
-      ASSERT (areadlinkat (-1, BASE "link") == NULL);
+      ASSERT (areadlinkat (AT_FDCWD == -1 ? -2 : -1, BASE "link") == NULL);
       ASSERT (errno == EBADF);
       errno = 0;
       ASSERT (areadlinkat (AT_FDCWD, BASE "link") == NULL);
index c48900e5a3f42167c35bc858daf2d958df032aae..1f509a0beafc31d5253fd5135b6767e4d28c8781 100644 (file)
@@ -34,7 +34,7 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (faccessat (-1, "foo", F_OK, 0) == -1);
+    ASSERT (faccessat (AT_FDCWD == -1 ? -2 : -1, "foo", F_OK, 0) == -1);
     ASSERT (errno == EBADF);
   }
   {
index 05a86b6fb41d57e2032add759c3e62e4d3fe5ac3..4805c2742bab268e7626795f89f8acbae6b8f0db 100644 (file)
@@ -36,7 +36,7 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (fchmodat (-1, "foo", 0600, 0) == -1);
+    ASSERT (fchmodat (AT_FDCWD == -1 ? -2 : -1, "foo", 0600, 0) == -1);
     ASSERT (errno == EBADF);
   }
   {
index 6e8d1568dc477b888e6873fe1bcdff7b879879da..c2cc26f55e94523c652dd8c354071119358924a2 100644 (file)
@@ -78,7 +78,8 @@ main (_GL_UNUSED int argc, char *argv[])
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (fchownat (-1, "foo", getuid (), getgid (), 0) == -1);
+    ASSERT (fchownat (AT_FDCWD == -1 ? -2 : -1, "foo", getuid (), getgid (), 0)
+            == -1);
     ASSERT (errno == EBADF);
   }
   {
index 05e5818372276b03436b521b1d1d5700014e99fc..2283de8e96469d1e23e9522443ef58f678961c83 100644 (file)
@@ -83,7 +83,7 @@ main (_GL_UNUSED int argc, _GL_UNUSED char *argv[])
     struct stat statbuf;
 
     errno = 0;
-    ASSERT (fstatat (-1, "foo", &statbuf, 0) == -1);
+    ASSERT (fstatat (AT_FDCWD == -1 ? -2 : -1, "foo", &statbuf, 0) == -1);
     ASSERT (errno == EBADF);
   }
   {
index 5fd2e37ebf262e64a9ba65386a8c05861ce320cc..c115b70744a268a9aff11205eb6ee691b3e36c32 100644 (file)
@@ -97,7 +97,7 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (linkat (-1, "foo", AT_FDCWD, "bar", 0) == -1);
+    ASSERT (linkat (AT_FDCWD == -1 ? -2 : -1, "foo", AT_FDCWD, "bar", 0) == -1);
     ASSERT (errno == EBADF);
   }
   {
@@ -109,7 +109,8 @@ main (void)
   ASSERT (close (creat (BASE "oo", 0600)) == 0);
   {
     errno = 0;
-    ASSERT (linkat (AT_FDCWD, BASE "oo", -1, "bar", 0) == -1);
+    ASSERT (linkat (AT_FDCWD, BASE "oo", AT_FDCWD == -1 ? -2 : -1, "bar", 0)
+            == -1);
     ASSERT (errno == EBADF);
   }
   {
index 162e449460b6aa1042b208b0c509e8fd856fb4d4..e1a5630f7d841134bac1a32a2b6da590914892be 100644 (file)
@@ -56,7 +56,7 @@ main (_GL_UNUSED int argc, char *argv[])
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (mkdirat (-1, "foo", 0700) == -1);
+    ASSERT (mkdirat (AT_FDCWD == -1 ? -2 : -1, "foo", 0700) == -1);
     ASSERT (errno == EBADF);
   }
   {
index 4c82895a9f8c883e90305a22188e97a58830923c..5a13b6fb81eb490eec48d51d2aad4d733ed3030f 100644 (file)
@@ -91,7 +91,7 @@ main (void)
       /* Test behaviour for invalid file descriptors.  */
       {
         errno = 0;
-        ASSERT (func (-1, "foo", 0600) == -1);
+        ASSERT (func (AT_FDCWD == -1 ? -2 : -1, "foo", 0600) == -1);
         ASSERT (errno == EBADF
                 || errno == ENOSYS /* seen on mingw */
                );
index 8b805c5f29b0b4363b1ea886b480e49e864dec52..ca11e260be8ab584af714016f3c0d1b66834145d 100644 (file)
@@ -84,7 +84,7 @@ main (void)
           ASSERT (openat (dfd, "", O_RDONLY) == -1);
           ASSERT (errno == ENOENT);
           errno = 0;
-          ASSERT (openat (-1, ".", O_RDONLY) == -1);
+          ASSERT (openat (AT_FDCWD == -1 ? -2 : -1, ".", O_RDONLY) == -1);
           ASSERT (errno == EBADF);
 
           /* Check for trailing slash and /dev/null handling.  */
@@ -98,7 +98,7 @@ main (void)
           ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL);
 #if defined __linux__ || defined __ANDROID__
           /* Using a bad directory is okay for absolute paths.  */
-          fd = openat (-1, "/dev/null", O_WRONLY);
+          fd = openat (AT_FDCWD == -1 ? -2 : -1, "/dev/null", O_WRONLY);
           ASSERT (STDERR_FILENO < fd);
 #endif
           /* Using a non-directory is wrong for relative paths.  */
index 009e2b5fb1e8bf90f8e45f7ee364d0b69ef9d64b..96d806fe4ddaab661bec95127b0adfb384b6c8c5 100644 (file)
@@ -61,7 +61,8 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (readlinkat (-1, "foo", buf, sizeof buf) == -1);
+    ASSERT (readlinkat (AT_FDCWD == -1 ? -2 : -1, "foo", buf, sizeof buf)
+            == -1);
     ASSERT (errno == EBADF);
   }
   {
index f173c7fe7f369eaf4204dfb8313696d753cb8299..f2e1a6198e4d0cfd420fce155cff97fb9a49e58b 100644 (file)
@@ -63,7 +63,7 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (renameat (-1, "foo", AT_FDCWD, "bar") == -1);
+    ASSERT (renameat (AT_FDCWD == -1 ? -2 : -1, "foo", AT_FDCWD, "bar") == -1);
     ASSERT (errno == EBADF);
   }
   {
@@ -75,7 +75,8 @@ main (void)
   ASSERT (close (creat (BASE "oo", 0600)) == 0);
   {
     errno = 0;
-    ASSERT (renameat (AT_FDCWD, BASE "oo", -1, "bar") == -1);
+    ASSERT (renameat (AT_FDCWD, BASE "oo", AT_FDCWD == -1 ? -2 : -1, "bar")
+            == -1);
     ASSERT (errno == EBADF);
   }
   {
index a1e8b97ccc7bf382f826c62d483998202134a801..6841e0875a5de4642e38b60a1b9e3df1396ab09c 100644 (file)
@@ -66,7 +66,8 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (renameatu (-1, "foo", AT_FDCWD, "bar", 0) == -1);
+    ASSERT (renameatu (AT_FDCWD == -1 ? -2 : -1, "foo", AT_FDCWD, "bar", 0)
+            == -1);
     ASSERT (errno == EBADF);
   }
   {
@@ -78,7 +79,8 @@ main (void)
   ASSERT (close (creat (BASE "oo", 0600)) == 0);
   {
     errno = 0;
-    ASSERT (renameatu (AT_FDCWD, BASE "oo", -1, "bar", 0) == -1);
+    ASSERT (renameatu (AT_FDCWD, BASE "oo", AT_FDCWD == -1 ? -2 : -1, "bar", 0)
+            == -1);
     ASSERT (errno == EBADF);
   }
   {
index 23ca43bdae3db7abe0515417303827f1dd6980a0..f5e20fb23d0592afc73d06639b2f8e7ac770635e 100644 (file)
@@ -60,7 +60,7 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (symlinkat ("foo", -1, "bar") == -1);
+    ASSERT (symlinkat ("foo", AT_FDCWD == -1 ? -2 : -1, "bar") == -1);
     ASSERT (errno == EBADF
             || errno == ENOSYS /* seen on mingw */
            );
index bd3f7609f09361ae2195184946057880986061c3..ce068f849fff372d61f4c5d395bc5b4d568afc0c 100644 (file)
@@ -67,7 +67,7 @@ main ()
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (unlinkat (-1, "foo", 0) == -1);
+    ASSERT (unlinkat (AT_FDCWD == -1 ? -2 : -1, "foo", 0) == -1);
     ASSERT (errno == EBADF);
   }
   {
index 4c6b21b1203d580cf5abe2842728de8015d5bc5e..8a32f53b78624d77c4a7f24234936b017b3df8de 100644 (file)
@@ -71,7 +71,7 @@ main (void)
   /* Test behaviour for invalid file descriptors.  */
   {
     errno = 0;
-    ASSERT (utimensat (-1, "foo", NULL, 0) == -1);
+    ASSERT (utimensat (AT_FDCWD == -1 ? -2 : -1, "foo", NULL, 0) == -1);
     ASSERT (errno == EBADF);
   }
   {