From 42a5b3fcc7fefe4a003f0ea786fee1aca635d8e9 Mon Sep 17 00:00:00 2001 From: okuji Date: Sun, 22 Mar 2009 10:45:06 +0000 Subject: [PATCH] 2009-03-22 Yoshinori K. Okuji * kern/env.c (grub_env_context_open): Added an argument to specify whether a new context inherits exported variables from current one. This is useful when making a sandbox to interpret a config file. All callers updated. * include/grub/env.h (grub_env_context_open): Updated the prototype. --- ChangeLog | 13 ++++++++++++- commands/configfile.c | 2 +- include/grub/env.h | 4 ++-- kern/env.c | 4 ++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36d851db2..633001594 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-03-22 Yoshinori K. Okuji + + * kern/env.c (grub_env_context_open): Added an argument to specify + whether a new context inherits exported variables from current + one. This is useful when making a sandbox to interpret a config + file. + All callers updated. + + * include/grub/env.h (grub_env_context_open): Updated the prototype. + 2009-03-22 Yoshinori K. Okuji * kern/env.c (grub_env_context_close): Fix memory leaks. @@ -11,7 +21,8 @@ (read_command_list): Prevent being executed twice. (read_fs_list): Likewise. - * include/grub/normal.h (grub_normal_execute): + * include/grub/normal.h (grub_normal_execute): Updated the + prototype. 2009-03-22 Pavel Roskin diff --git a/commands/configfile.c b/commands/configfile.c index 4c85d3c3f..37d02b6b8 100644 --- a/commands/configfile.c +++ b/commands/configfile.c @@ -36,7 +36,7 @@ grub_cmd_source (grub_command_t cmd, int argc, char **args) if (new_env) { grub_cls (); - grub_env_context_open (); + grub_env_context_open (1); } grub_normal_execute (args[0], 1, ! new_env); diff --git a/include/grub/env.h b/include/grub/env.h index 36c1e8739..440185a59 100644 --- a/include/grub/env.h +++ b/include/grub/env.h @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2003,2005,2006,2007 Free Software Foundation, Inc. + * Copyright (C) 2003,2005,2006,2007,2009 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ void EXPORT_FUNC(grub_env_iterate) (int (*func) (struct grub_env_var *var)); grub_err_t EXPORT_FUNC(grub_register_variable_hook) (const char *name, grub_env_read_hook_t read_hook, grub_env_write_hook_t write_hook); -grub_err_t EXPORT_FUNC(grub_env_context_open) (void); +grub_err_t EXPORT_FUNC(grub_env_context_open) (int export); grub_err_t EXPORT_FUNC(grub_env_context_close) (void); grub_err_t EXPORT_FUNC(grub_env_export) (const char *name); diff --git a/kern/env.c b/kern/env.c index 5c69e280b..d8447b995 100644 --- a/kern/env.c +++ b/kern/env.c @@ -75,7 +75,7 @@ grub_env_find (const char *name) } grub_err_t -grub_env_context_open (void) +grub_env_context_open (int export) { struct grub_env_context *context; int i; @@ -95,7 +95,7 @@ grub_env_context_open (void) for (var = context->prev->vars[i]; var; var = var->next) { - if (var->type == GRUB_ENV_VAR_GLOBAL) + if (export && var->type == GRUB_ENV_VAR_GLOBAL) { if (grub_env_set (var->name, var->value) != GRUB_ERR_NONE) {