X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-fsync.c;h=3e6fb2951f1f879c313ea1908eb589276e44c942;hb=463b88a5dbb558e2512c64bfb6562a003b40ddda;hp=e86624862a6b0c10f7f9d03b0bd068ae2582b19e;hpb=f52a5c387483cc1e0a87952f1b60a9a288425c7a;p=gnulib.git diff --git a/tests/test-fsync.c b/tests/test-fsync.c index e86624862..3e6fb2951 100644 --- a/tests/test-fsync.c +++ b/tests/test-fsync.c @@ -1,5 +1,5 @@ /* Test of fsync() function. - Copyright (C) 2008-2011 Free Software Foundation, Inc. + Copyright (C) 2008-2012 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,24 +32,47 @@ main (void) int fd; const char *file = "test-fsync.txt"; + /* Assuming stdin and stdout are ttys, fsync is allowed to fail, but + may succeed as an extension. */ for (fd = 0; fd < 2; fd++) if (fsync (fd) != 0) { ASSERT (errno == EINVAL /* POSIX */ - || errno == ENOTSUP /* seen on MacOS X 10.5 */ + || errno == ENOTSUP /* seen on Mac OS X 10.5 */ || errno == EBADF /* seen on AIX 7.1 */ + || errno == EIO /* seen on mingw */ ); } - errno = 0; - ASSERT (fsync (-1) == -1); - ASSERT (errno == EBADF); + /* fsync must fail on invalid fd. */ + { + errno = 0; + ASSERT (fsync (-1) == -1); + ASSERT (errno == EBADF); + } + { + errno = 0; + ASSERT (fsync (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 (fsync (fd) == 0); ASSERT (close (fd) == 0); + + /* For a read-only regular file input file descriptor, fsync should + succeed (since at least atime changes can be synchronized). */ + fd = open (file, O_RDONLY); + ASSERT (0 <= fd); + { + char buf[1]; + ASSERT (read (fd, buf, sizeof buf) == sizeof buf); + } + ASSERT (fsync (fd) == 0); + ASSERT (close (fd) == 0); + ASSERT (unlink (file) == 0); return 0;