12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include <stdio.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- int main(int argc, char **argv)
- {
- const char *path;
- char buf[5];
- int fd, rc;
- if (argc < 2) {
- fprintf(stderr, "usage: %s <path>\n", argv[0]);
- return EXIT_FAILURE;
- }
- path = argv[1];
- /* attributes: EFI_VARIABLE_NON_VOLATILE |
- * EFI_VARIABLE_BOOTSERVICE_ACCESS |
- * EFI_VARIABLE_RUNTIME_ACCESS
- */
- *(uint32_t *)buf = 0x7;
- buf[4] = 0;
- /* create a test variable */
- fd = open(path, O_WRONLY | O_CREAT);
- if (fd < 0) {
- perror("open(O_WRONLY)");
- return EXIT_FAILURE;
- }
- rc = write(fd, buf, sizeof(buf));
- if (rc != sizeof(buf)) {
- perror("write");
- return EXIT_FAILURE;
- }
- close(fd);
- fd = open(path, O_RDONLY);
- if (fd < 0) {
- perror("open");
- return EXIT_FAILURE;
- }
- if (unlink(path) < 0) {
- perror("unlink");
- return EXIT_FAILURE;
- }
- rc = read(fd, buf, sizeof(buf));
- if (rc > 0) {
- fprintf(stderr, "reading from an unlinked variable "
- "shouldn't be possible\n");
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
|