summaryrefslogtreecommitdiff
path: root/tests/test-fopen-gnu.c
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@gnu.org>2020-05-28 11:40:49 +0200
committerDaiki Ueno <ueno@gnu.org>2020-05-28 18:41:46 +0200
commit01204a148d0ca7c7f493ff331b462294f4959850 (patch)
treee55eab40a978da1394836ce90f8ac32d31fec1e1 /tests/test-fopen-gnu.c
parent278738f2881906b3a3efd2144ff8081a39c17587 (diff)
downloadgnulib-01204a148d0ca7c7f493ff331b462294f4959850.tar.gz
fopen-gnu: make 'b' flag can be used with 'e' on Windows
* lib/fopen.c (rpl_fopen): Pass O_BINARY to open, if a 'b' flag is specified on Windows. * tests/test-fopen-gnu.c (DATA): New define. (main): Add test for reading binary files with an 'e' flag.
Diffstat (limited to 'tests/test-fopen-gnu.c')
-rw-r--r--tests/test-fopen-gnu.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/test-fopen-gnu.c b/tests/test-fopen-gnu.c
index cae40421ab..4d98dcd855 100644
--- a/tests/test-fopen-gnu.c
+++ b/tests/test-fopen-gnu.c
@@ -29,15 +29,20 @@
#define BASE "test-fopen-gnu.t"
+/* 0x1a is an EOF on Windows. */
+#define DATA "abc\x1adef"
+
int
main (void)
{
FILE *f;
int fd;
int flags;
+ char buf[16];
/* Remove anything from prior partial run. */
unlink (BASE "file");
+ unlink (BASE "binary");
/* Create the file. */
f = fopen (BASE "file", "w");
@@ -64,8 +69,20 @@ main (void)
ASSERT (f == NULL);
ASSERT (errno == EEXIST);
+ /* Open a binary file and check that the 'e' mode doesn't interfere. */
+ f = fopen (BASE "binary", "wbe");
+ ASSERT (f);
+ ASSERT (fwrite (DATA, 1, sizeof (DATA)-1, f) == sizeof (DATA)-1);
+ ASSERT (fclose (f) == 0);
+
+ f = fopen (BASE "binary", "rbe");
+ ASSERT (f);
+ ASSERT (fread (buf, 1, sizeof (buf), f) == sizeof (DATA)-1);
+ ASSERT (fclose (f) == 0);
+
/* Cleanup. */
ASSERT (unlink (BASE "file") == 0);
+ ASSERT (unlink (BASE "binary") == 0);
return 0;
}