Mercurial > hg > octave-lojdl > gnulib-hg
annotate tests/test-fdatasync.c @ 15688:0a93aea8485c
fdatasync tests: EBADF tests.
* tests/test-fdatasync.c (main): Add more tests for EBADF.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 20 Sep 2011 22:03:35 +0200 |
parents | 76e03c88266c |
children | 8250f2777afc |
rev | line source |
---|---|
15622 | 1 /* Test of fdatasync() function. |
2 Copyright (C) 2008-2011 Free Software Foundation, Inc. | |
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 */ |
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
41 || errno == ENOTSUP /* seen on MacOS X 10.5 */ |
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 { |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
54 errno = 0; |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
55 ASSERT (fdatasync (99) == -1); |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
56 ASSERT (errno == EBADF); |
0a93aea8485c
fdatasync tests: EBADF tests.
Bruno Haible <bruno@clisp.org>
parents:
15631
diff
changeset
|
57 } |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
58 |
15622 | 59 fd = open (file, O_WRONLY|O_CREAT|O_TRUNC, 0644); |
60 ASSERT (0 <= fd); | |
61 ASSERT (write (fd, "hello", 5) == 5); | |
62 ASSERT (fdatasync (fd) == 0); | |
63 ASSERT (close (fd) == 0); | |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
64 |
15622 | 65 #if 0 |
66 /* POSIX is self-contradictory on whether fdatasync must fail on | |
67 read-only file descriptors. Glibc allows it, as does our | |
68 implementation if fsync allows it. */ | |
69 fd = open (file, O_RDONLY); | |
70 ASSERT (0 <= fd); | |
71 errno = 0; | |
72 ASSERT (fdatasync (fd) == -1); | |
73 ASSERT (errno == EBADF); | |
74 ASSERT (close (fd) == 0); | |
75 #endif | |
15631
76e03c88266c
Enhance fsync, fdatasync tests.
Bruno Haible <bruno@clisp.org>
parents:
15622
diff
changeset
|
76 |
15622 | 77 ASSERT (unlink (file) == 0); |
78 | |
79 return 0; | |
80 } |