This source file includes following definitions.
- do_open
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <config.h>
20
21 #include <fcntl.h>
22
23 #include "signature.h"
24 SIGNATURE_CHECK (openat, int, (int, char const *, int, ...));
25
26 #include <errno.h>
27 #include <stdarg.h>
28 #include <stdbool.h>
29 #include <stdio.h>
30 #include <unistd.h>
31
32 #include "macros.h"
33
34 #define BASE "test-openat.t"
35
36 #include "test-open.h"
37
38 static int dfd = AT_FDCWD;
39
40
41 static int
42 do_open (char const *name, int flags, ...)
43 {
44 if (flags & O_CREAT)
45 {
46 mode_t mode = 0;
47 va_list arg;
48 va_start (arg, flags);
49
50
51
52 mode = va_arg (arg, PROMOTED_MODE_T);
53
54 va_end (arg);
55 return openat (dfd, name, flags, mode);
56 }
57 return openat (dfd, name, flags);
58 }
59
60 int
61 main (_GL_UNUSED int argc, char *argv[])
62 {
63 int result;
64
65
66 {
67 errno = 0;
68 ASSERT (openat (-1, "foo", O_RDONLY) == -1);
69 ASSERT (errno == EBADF);
70 }
71 {
72 close (99);
73 errno = 0;
74 ASSERT (openat (99, "foo", O_RDONLY) == -1);
75 ASSERT (errno == EBADF);
76 }
77
78
79 result = test_open (do_open, false);
80 dfd = open (".", O_RDONLY);
81 ASSERT (0 <= dfd);
82 ASSERT (test_open (do_open, false) == result);
83 ASSERT (close (dfd) == 0);
84
85
86
87
88 ASSERT (close (STDIN_FILENO) == 0);
89 ASSERT (openat (AT_FDCWD, ".", O_RDONLY) == STDIN_FILENO);
90 {
91 dfd = open (".", O_RDONLY);
92 ASSERT (STDIN_FILENO < dfd);
93 ASSERT (chdir ("..") == 0);
94 ASSERT (close (STDIN_FILENO) == 0);
95 ASSERT (openat (dfd, ".", O_RDONLY) == STDIN_FILENO);
96 ASSERT (close (dfd) == 0);
97 }
98 return result;
99 }