Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / tools / testing / selftests / efivarfs / open-unlink.c
1 #include <stdio.h>
2 #include <stdint.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <sys/types.h>
6 #include <sys/stat.h>
7 #include <fcntl.h>
8
9 int main(int argc, char **argv)
10 {
11         const char *path;
12         char buf[5];
13         int fd, rc;
14
15         if (argc < 2) {
16                 fprintf(stderr, "usage: %s <path>\n", argv[0]);
17                 return EXIT_FAILURE;
18         }
19
20         path = argv[1];
21
22         /* attributes: EFI_VARIABLE_NON_VOLATILE |
23          *              EFI_VARIABLE_BOOTSERVICE_ACCESS |
24          *              EFI_VARIABLE_RUNTIME_ACCESS
25          */
26         *(uint32_t *)buf = 0x7;
27         buf[4] = 0;
28
29         /* create a test variable */
30         fd = open(path, O_WRONLY | O_CREAT);
31         if (fd < 0) {
32                 perror("open(O_WRONLY)");
33                 return EXIT_FAILURE;
34         }
35
36         rc = write(fd, buf, sizeof(buf));
37         if (rc != sizeof(buf)) {
38                 perror("write");
39                 return EXIT_FAILURE;
40         }
41
42         close(fd);
43
44         fd = open(path, O_RDONLY);
45         if (fd < 0) {
46                 perror("open");
47                 return EXIT_FAILURE;
48         }
49
50         if (unlink(path) < 0) {
51                 perror("unlink");
52                 return EXIT_FAILURE;
53         }
54
55         rc = read(fd, buf, sizeof(buf));
56         if (rc > 0) {
57                 fprintf(stderr, "reading from an unlinked variable "
58                                 "shouldn't be possible\n");
59                 return EXIT_FAILURE;
60         }
61
62         return EXIT_SUCCESS;
63 }