This source file includes following definitions.
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <config.h>
18
19 #include <sys/stat.h>
20
21 #include "signature.h"
22 SIGNATURE_CHECK (lchmod, int, (const char *, mode_t));
23
24 #include <errno.h>
25 #include <fcntl.h>
26 #include <sys/stat.h>
27 #include <unistd.h>
28
29 #include "macros.h"
30
31 #define BASE "test-lchmod."
32
33 int
34 main (void)
35 {
36
37 {
38 struct stat statbuf;
39 unlink (BASE "file");
40 ASSERT (close (creat (BASE "file", 0600)) == 0);
41 ASSERT (lchmod (BASE "file", 0400) == 0);
42 ASSERT (stat (BASE "file", &statbuf) >= 0);
43 ASSERT ((statbuf.st_mode & 0700) == 0400);
44
45 errno = 0;
46 ASSERT (lchmod (BASE "file/", 0600) == -1);
47 ASSERT (errno == ENOTDIR);
48
49
50 ASSERT (chmod (BASE "file", 0600) == 0);
51 ASSERT (unlink (BASE "file") == 0);
52 }
53
54
55 {
56 struct stat statbuf;
57
58 rmdir (BASE "dir");
59 ASSERT (mkdir (BASE "dir", 0700) == 0);
60 ASSERT (lchmod (BASE "dir", 0500) == 0);
61 ASSERT (stat (BASE "dir", &statbuf) >= 0);
62 ASSERT ((statbuf.st_mode & 0700) == 0500);
63 ASSERT (lchmod (BASE "dir/", 0700) == 0);
64
65
66 ASSERT (rmdir (BASE "dir") == 0);
67 }
68
69
70 {
71 unlink (BASE "file");
72 unlink (BASE "link");
73 if (symlink (BASE "file", BASE "link") == 0)
74 {
75 struct stat statbuf;
76 ASSERT (close (creat (BASE "file", 0600)) == 0);
77 lchmod (BASE "link", 0400);
78 ASSERT (stat (BASE "file", &statbuf) >= 0);
79 ASSERT ((statbuf.st_mode & 0700) == 0600);
80 }
81
82 unlink (BASE "file");
83 unlink (BASE "link");
84 }
85
86 return 0;
87 }