On mingw 10, I see this test failure:

FAIL: test-string-desc.sh
=========================

../../gltests/test-string-desc.c:113: assertion 'string_desc_write (3, s1) == 
0' failed
FAIL test-string-desc.sh (exit status: 1)

Apparently, in the Cygwin environment, it is not possible to pass an
open file descriptor ≥ 3 from the Cygwin bash to a mingw program.

This patch fixes it.


2023-04-22  Bruno Haible  <br...@clisp.org>

        string-desc tests: Avoid test failure on native Windows.
        * tests/test-string-desc.c: Include <fcntl.h>, <unistd.h>.
        (main): Expect a file name argument. Write to this file, instead of to
        fd 3.
        * tests/test-string-desc.sh: Pass a file name as argument, instead of
        using '3>'.
        * modules/string-desc-tests (Depends-on): Add close.

diff --git a/modules/string-desc-tests b/modules/string-desc-tests
index d7923c3a60..687d4e2af2 100644
--- a/modules/string-desc-tests
+++ b/modules/string-desc-tests
@@ -4,6 +4,7 @@ tests/test-string-desc.c
 tests/macros.h
 
 Depends-on:
+close
 
 configure.ac:
 
diff --git a/tests/test-string-desc.c b/tests/test-string-desc.c
index 53aeb68743..042e6cb6a9 100644
--- a/tests/test-string-desc.c
+++ b/tests/test-string-desc.c
@@ -20,14 +20,20 @@
 
 #include "string-desc.h"
 
+#include <fcntl.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "macros.h"
 
 int
-main (void)
+main (int argc, char *argv[])
 {
+  ASSERT (argc > 1);
+  int fd3 = open (argv[1], O_RDWR | O_TRUNC | O_CREAT, 0600);
+  ASSERT (fd3 >= 0);
+
   string_desc_t s0 = string_desc_new_empty ();
   string_desc_t s1 = string_desc_from_c ("Hello world!");
   string_desc_t s2 = string_desc_new_addr (21, "The\0quick\0brown\0\0fox");
@@ -109,9 +115,9 @@ main (void)
                            string_desc_from_c ("llo")) == 0);
 
   /* Test string_desc_write.  */
-  ASSERT (string_desc_write (3, s0) == 0);
-  ASSERT (string_desc_write (3, s1) == 0);
-  ASSERT (string_desc_write (3, s2) == 0);
+  ASSERT (string_desc_write (fd3, s0) == 0);
+  ASSERT (string_desc_write (fd3, s1) == 0);
+  ASSERT (string_desc_write (fd3, s2) == 0);
 
   /* Test string_desc_fwrite.  */
   ASSERT (string_desc_fwrite (stdout, s0) == 0);
@@ -182,5 +188,7 @@ main (void)
     free (ptr);
   }
 
+  close (fd3);
+
   return 0;
 }
diff --git a/tests/test-string-desc.sh b/tests/test-string-desc.sh
index 57f0e2371b..a4d92792eb 100755
--- a/tests/test-string-desc.sh
+++ b/tests/test-string-desc.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 . "${srcdir=.}/init.sh"; path_prepend_ .
 
-${CHECKER} test-string-desc${EXEEXT} > test-string-desc-1.tmp 3> 
test-string-desc-3.tmp || Exit 1
+${CHECKER} test-string-desc${EXEEXT} test-string-desc-3.tmp > 
test-string-desc-1.tmp || Exit 1
 
 printf 'Hello world!The\0quick\0brown\0\0fox\0' > test-string-desc.ok
 




Reply via email to