This source file includes following definitions.
- rmdirat
- unlinker
- 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 <unistd.h>
22
23 #include "signature.h"
24 SIGNATURE_CHECK (unlinkat, int, (int, char const *, int));
25
26 #include <fcntl.h>
27 #include <errno.h>
28 #include <stdbool.h>
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <sys/stat.h>
32
33 #include "unlinkdir.h"
34 #include "ignore-value.h"
35 #include "macros.h"
36
37 #define BASE "test-unlinkat.t"
38
39 #include "test-rmdir.h"
40 #include "test-unlink.h"
41
42 static int dfd = AT_FDCWD;
43
44
45 static int
46 rmdirat (char const *name)
47 {
48 return unlinkat (dfd, name, AT_REMOVEDIR);
49 }
50
51
52 static int
53 unlinker (char const *name)
54 {
55 return unlinkat (dfd, name, 0);
56 }
57
58 int
59 main (_GL_UNUSED int argc, char *argv[])
60 {
61
62 int result1;
63 int result2;
64
65
66 ignore_value (system ("rm -rf " BASE "*"));
67
68
69 {
70 errno = 0;
71 ASSERT (unlinkat (-1, "foo", 0) == -1);
72 ASSERT (errno == EBADF);
73 }
74 {
75 close (99);
76 errno = 0;
77 ASSERT (unlinkat (99, "foo", 0) == -1);
78 ASSERT (errno == EBADF);
79 }
80
81 result1 = test_rmdir_func (rmdirat, false);
82 result2 = test_unlink_func (unlinker, false);
83 ASSERT (result1 == result2);
84 dfd = open (".", O_RDONLY);
85 ASSERT (0 <= dfd);
86 result2 = test_rmdir_func (rmdirat, false);
87 ASSERT (result1 == result2);
88 result2 = test_unlink_func (unlinker, false);
89 ASSERT (result1 == result2);
90 ASSERT (close (dfd) == 0);
91 if (result1 == 77)
92 fputs ("skipping test: symlinks not supported on this file system\n",
93 stderr);
94 return result1;
95 }