From: Oliver Steffen Date: Fri, 26 May 2023 11:35:48 +0000 (+0200) Subject: efi: Add grub_efi_set_variable_to_string() X-Git-Tag: grub-2.12-rc1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e83a88f6ea7f97d643387681fe044f45dcd732b9;p=thirdparty%2Fgrub.git efi: Add grub_efi_set_variable_to_string() Add a function that sets an EFI variable to a string value. The string is converted from UTF-8 to UTF-16. Signed-off-by: Oliver Steffen Reviewed-by: Daniel Kiper --- diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c index bd3b125a4..f54fdcacd 100644 --- a/grub-core/kern/efi/efi.c +++ b/grub-core/kern/efi/efi.c @@ -286,6 +286,28 @@ grub_efi_get_variable_with_attributes (const char *var, return status; } +grub_err_t +grub_efi_set_variable_to_string (const char *name, const grub_guid_t *guid, + const char *value, grub_efi_uint32_t attributes) +{ + grub_efi_char16_t *value_16; + grub_ssize_t len16; + grub_err_t status; + + len16 = grub_utf8_to_utf16_alloc (value, &value_16, NULL); + + if (len16 < 0) + return grub_errno; + + status = grub_efi_set_variable_with_attributes (name, guid, + (void *) value_16, (len16 + 1) * sizeof (value_16[0]), + attributes); + + grub_free (value_16); + + return status; +} + grub_efi_status_t grub_efi_get_variable (const char *var, const grub_guid_t *guid, grub_size_t *datasize_out, void **data_out) diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h index 3d056a0a4..cd977cbbc 100644 --- a/include/grub/efi/efi.h +++ b/include/grub/efi/efi.h @@ -108,6 +108,9 @@ EXPORT_FUNC (grub_efi_set_variable) (const char *var, const grub_guid_t *guid, void *data, grub_size_t datasize); +grub_err_t +EXPORT_FUNC (grub_efi_set_variable_to_string) (const char *name, const grub_guid_t *guid, + const char *value, grub_efi_uint32_t attributes); int EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, const grub_efi_device_path_t *dp2);