On Tue, Sep 02, 2025 at 02:45:59PM +0800, Michael Chang via Grub-devel wrote:
> This patch adds the function fs_envblk_write to update the reserved
> environment block on disk. The helper takes an in memory envblk buffer
> and writes it back to the device at the location defined by the
> fs_envblk specification. It performs size checks and uses file sync to
> ensure that the updated data is flushed.
>
> The helper is also added into the fs_envblk ops table, together with the
> open helper from the previous patch. With this change the basic input
> and output path for an external environment block is complete. The
> choice of which variables should be written externally will be handled
> by later patches.
>
> Signed-off-by: Michael Chang <[email protected]>
> Reviewed-by: Neal Gompa <[email protected]>
> ---
> util/grub-editenv.c | 37 ++++++++++++++++++++++++++++++++++++-
> 1 file changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/util/grub-editenv.c b/util/grub-editenv.c
> index 7bc872dc7..a319d01b7 100644
> --- a/util/grub-editenv.c
> +++ b/util/grub-editenv.c
> @@ -133,11 +133,14 @@ struct fs_envblk_spec {
> };
>
> static grub_envblk_t fs_envblk_open (grub_envblk_t envblk);
> +static void fs_envblk_write (grub_envblk_t envblk);
>
> struct fs_envblk_ops {
> grub_envblk_t (*open) (grub_envblk_t);
> + void (*write) (grub_envblk_t);
> } fs_envblk_ops = {
> - .open = fs_envblk_open
> + .open = fs_envblk_open,
> + .write = fs_envblk_write
> };
>
> struct fs_envblk {
> @@ -356,6 +359,38 @@ write_envblk (const char *name, grub_envblk_t envblk)
> fclose (fp);
> }
>
> +static void
> +fs_envblk_write (grub_envblk_t envblk)
> +{
> + FILE *fp;
> + const char *device;
> + int offset, size;
Again, please use proper types for offset and size.
> + if (envblk == NULL)
> + return;
> +
> + device = fs_envblk->dev;
> + offset = fs_envblk->spec->offset;
> + size = fs_envblk->spec->size;
> +
> + if (grub_envblk_size (envblk) > size)
> + grub_util_error ("%s", _("environment block too small"));
> +
> + fp = grub_util_fopen (device, "r+b");
Why do you use "b" here? Environment block is not a binary (file)...
And s/r+/w+/?
Daniel
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel