On Cygwin 3.4.6, but not on Cygwin 3.5.3, I see these test failures:

FAIL: test-areadlinkat.exe
FAIL: test-areadlinkat-with-size.exe
FAIL: test-readlinkat.exe

The cause is an errno value EBADF, where EINVAL would be better.
Not worth adding a workaround. This patch avoids the failures.


2024-05-23  Bruno Haible  <br...@clisp.org>

        readlinkat, areadlinkat: Avoid test failures on Cygwin 3.4.6.
        * tests/test-readlink.h (test_readlink): For an empty file name, allow
        errno == EBADF.
        * tests/test-areadlink.h (test_areadlink): Likewise.

diff --git a/tests/test-areadlink.h b/tests/test-areadlink.h
index cc65c4cc4e..e4fc225d7c 100644
--- a/tests/test-areadlink.h
+++ b/tests/test-areadlink.h
@@ -36,7 +36,8 @@ test_areadlink (char * (*func) (char const *, size_t), bool 
print)
   ASSERT (errno == ENOENT);
   errno = 0;
   ASSERT (func ("", 1) == NULL);
-  ASSERT (errno == ENOENT || errno == EINVAL);
+  ASSERT (errno == ENOENT || errno == EINVAL
+          || errno == EBADF /* Cygwin < 3.5 */);
   errno = 0;
   ASSERT (func (".", 1) == NULL);
   ASSERT (errno == EINVAL);
diff --git a/tests/test-readlink.h b/tests/test-readlink.h
index 3a21b60b15..c04ae311e2 100644
--- a/tests/test-readlink.h
+++ b/tests/test-readlink.h
@@ -38,7 +38,8 @@ test_readlink (ssize_t (*func) (char const *, char *, 
size_t), bool print)
   ASSERT (errno == ENOENT);
   errno = 0;
   ASSERT (func ("", buf, sizeof buf) == -1);
-  ASSERT (errno == ENOENT || errno == EINVAL);
+  ASSERT (errno == ENOENT || errno == EINVAL
+          || errno == EBADF /* Cygwin < 3.5 */);
   errno = 0;
   ASSERT (func (".", buf, sizeof buf) == -1);
   ASSERT (errno == EINVAL);




Reply via email to