Mercurial > hg > octave-lojdl > gnulib-hg
annotate tests/test-fdatasync.c @ 17476:6057744acd2c default tip master
autoupdate
author | Karl Berry <karl@freefriends.org> |
---|---|
date | Fri, 16 Aug 2013 06:32:22 -0700 |
parents | 3a09cc104f4c |
children |
rev | line source |
---|---|
15622 | 1 /* Test of fdatasync() function. |
17249
e542fd46ad6f
maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents:
16935
diff
changeset
|
2 Copyright (C) 2008-2013 Free Software Foundation, Inc. |
15622 | 3 |
4 This program is free software: you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 3 of the License, or | |
7 (at your option) any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
16 | |
17 #include <config.h> | |
18 | |
19 #include <unistd.h> | |
20 | |
21 #include "signature.h" | |
22 SIGNATURE_CHECK (fdatasync, int, (int)); | |
23 | |
24 #include <errno.h> | |
25 #include <fcntl.h> | |
26 | |
27 #include "macros.h" | |
28 | |
29 int | |
30 main (void) | |
31 { | |
32 int fd; | |
33 const char *file = "test-fdatasync.txt"; | |
34 | |
15688
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
35 /* Assuming stdin and stdout are ttys, fdatasync is allowed to fail, but |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
36 may succeed as an extension. */ |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
37 for (fd = 0; fd < 2; fd++) |
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
38 if (fdatasync (fd) != 0) |
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
39 { |
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
40 ASSERT (errno == EINVAL /* POSIX */ |
16935
498a2211d839
Write "Mac OS X" instead of "MacOS X".
Bruno Haible <bruno@clisp.org>
parents:
16201
diff
changeset
|
41 || errno == ENOTSUP /* seen on Mac OS X 10.5 */ |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
42 || errno == EBADF /* seen on AIX 7.1 */ |
15688
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
43 || errno == EIO /* seen on mingw */ |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
44 ); |
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
45 } |
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
46 |
15688
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
47 /* fdatasync must fail on invalid fd. */ |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
48 { |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
49 errno = 0; |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
50 ASSERT (fdatasync (-1) == -1); |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
51 ASSERT (errno == EBADF); |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
52 } |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
53 { |
17295
3a09cc104f4c
tests: don't assume fd 99 is closed
Paul Eggert <eggert@cs.ucla.edu>
parents:
17249
diff
changeset
|
54 close (99); |
15688
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
55 errno = 0; |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
56 ASSERT (fdatasync (99) == -1); |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
57 ASSERT (errno == EBADF); |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
58 } |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
59 |
15622 | 60 fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0644); |
61 ASSERT (0 <= fd); | |
62 ASSERT (write (fd, "hello", 5) == 5); | |
63 ASSERT (fdatasync (fd) == 0); | |
64 ASSERT (close (fd) == 0); | |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
65 |
15622 | 66 #if 0 |
67 /* POSIX is self-contradictory on whether fdatasync must fail on | |
68 read-only file descriptors. Glibc allows it, as does our | |
69 implementation if fsync allows it. */ | |
70 fd = open (file, O_RDONLY); | |
71 ASSERT (0 <= fd); | |
72 errno = 0; | |
73 ASSERT (fdatasync (fd) == -1); | |
74 ASSERT (errno == EBADF); | |
75 ASSERT (close (fd) == 0); | |
76 #endif | |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
77 |
15622 | 78 ASSERT (unlink (file) == 0); |
79 | |
80 return 0; | |
81 } |