X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-fdatasync.c;h=697701a2ba38d1e4fc4840503bff75fcfed1c3e7;hb=8e0f64e4cd12f7779113bc438afd106dad3e1f1a;hp=d23e6db388725398a97081e3d8d1ae61f0d00663;hpb=64da7b6c00400c0a5e5b02df98faec97c0954a3c;p=gnulib.git diff --git a/tests/test-fdatasync.c b/tests/test-fdatasync.c index d23e6db38..697701a2b 100644 --- a/tests/test-fdatasync.c +++ b/tests/test-fdatasync.c @@ -1,5 +1,5 @@ /* Test of fdatasync() function. - Copyright (C) 2008-2011 Free Software Foundation, Inc. + Copyright (C) 2008-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,21 +32,37 @@ main (void) int fd; const char *file = "test-fdatasync.txt"; - if (fdatasync (STDOUT_FILENO) != 0) - { - ASSERT (errno == EINVAL /* POSIX */ - || errno == ENOTSUP /* seen on MacOS X 10.5 */ - || errno == EBADF /* seen on AIX 7.1 */ - ); - } - errno = 0; - ASSERT (fdatasync (-1) == -1); - ASSERT (errno == EBADF); + /* Assuming stdin and stdout are ttys, fdatasync is allowed to fail, but + may succeed as an extension. */ + for (fd = 0; fd < 2; fd++) + if (fdatasync (fd) != 0) + { + ASSERT (errno == EINVAL /* POSIX */ + || errno == ENOTSUP /* seen on Mac OS X 10.5 */ + || errno == EBADF /* seen on AIX 7.1 */ + || errno == EIO /* seen on mingw */ + ); + } + + /* fdatasync must fail on invalid fd. */ + { + errno = 0; + ASSERT (fdatasync (-1) == -1); + ASSERT (errno == EBADF); + } + { + close (99); + errno = 0; + ASSERT (fdatasync (99) == -1); + ASSERT (errno == EBADF); + } + fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0644); ASSERT (0 <= fd); ASSERT (write (fd, "hello", 5) == 5); ASSERT (fdatasync (fd) == 0); ASSERT (close (fd) == 0); + #if 0 /* POSIX is self-contradictory on whether fdatasync must fail on read-only file descriptors. Glibc allows it, as does our @@ -58,6 +74,7 @@ main (void) ASSERT (errno == EBADF); ASSERT (close (fd) == 0); #endif + ASSERT (unlink (file) == 0); return 0;