64 lines
1.1 KiB
C
64 lines
1.1 KiB
C
|
#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;
|
||
|
}
|