| @@ -, +, @@ |
| --- |
| 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; |
| } |
| |
| |
| -- |