41 lines
950 B
Diff
41 lines
950 B
Diff
@@ -, +, @@
|
|
---
|
|
src/lib/efivars_sysfs.c | 16 +++++++++++++---
|
|
1 files changed, 13 insertions(+), 3 deletions(-)
|
|
--- a/src/lib/efivars_sysfs.c
|
|
+++ a/src/lib/efivars_sysfs.c
|
|
@@ -66,6 +66,7 @@ static efi_status_t
|
|
sysfs_write_variable(const char *filename, efi_variable_t *var)
|
|
{
|
|
int fd;
|
|
+ int rc = EFI_SUCCESS;
|
|
size_t writesize;
|
|
char buffer[PATH_MAX+40];
|
|
|
|
@@ -77,12 +78,21 @@ sysfs_write_variable(const char *filename, efi_variable_t *var)
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
writesize = write(fd, var, sizeof(*var));
|
|
+ if (writesize == -1) {
|
|
+ if (errno == -ENOSPC)
|
|
+ rc = EFI_OUT_OF_RESOURCES;
|
|
+ else
|
|
+ rc = EFI_INVALID_PARAMETER;
|
|
+ goto out;
|
|
+ }
|
|
if (writesize != sizeof(*var)) {
|
|
- close(fd);
|
|
- return EFI_INVALID_PARAMETER;
|
|
+ rc = EFI_INVALID_PARAMETER;
|
|
}
|
|
+out:
|
|
+ if (rc != EFI_SUCCESS)
|
|
+ fprintf(stderr, "Failed to write variable: %s\n", strerror(errno));
|
|
close(fd);
|
|
- return EFI_SUCCESS;
|
|
+ return rc;
|
|
}
|
|
|
|
|
|
--
|