I don't know the code much, but i think your change looks like a hack.
I fell missing an internal command registration in main.c, a small function
to handle the command, and an extra parameter in
grub_script_execute_cmdline to allow/exclude user defined commands so that
it can be called from builtin, and a change in the documentation to
advertise about builtin command.
Cheers
Le 22 mai 2014 08:46, "Glenn Washburn" <[email protected]> a
écrit :
> This is implements the builtin pseudo-command.
>
> ---
> grub-core/script/execute.c | 25 +++++++++++++++++++++----
> 1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c
> index 857f8c6..2dbc17f 100644
> --- a/grub-core/script/execute.c
> +++ b/grub-core/script/execute.c
> @@ -917,6 +917,7 @@ grub_script_execute_cmdline (struct grub_script_cmd
> *cmd) int argc;
> char **args;
> int invert;
> + int builtin;
> struct grub_script_argv argv = { 0, 0, 0 };
>
> /* Lookup the command. */
> @@ -924,6 +925,7 @@ grub_script_execute_cmdline (struct grub_script_cmd
> *cmd) return grub_errno;
>
> invert = 0;
> + builtin = 0;
> argc = argv.argc - 1;
> args = argv.args + 1;
> cmdname = argv.args[0];
> @@ -937,12 +939,27 @@ grub_script_execute_cmdline (struct
> grub_script_cmd *cmd) }
>
> invert = 1;
> - argc = argv.argc - 2;
> - args = argv.args + 2;
> - cmdname = argv.args[1];
> + cmdname = args[0];
> + argc--;
> + args++;
> + }
> + if (grub_strcmp (cmdname, "builtin") == 0)
> + {
> + if (argv.argc < 2 || ! argv.args[1])
> + {
> + grub_script_argv_free (&argv);
> + return grub_error (GRUB_ERR_BAD_ARGUMENT,
> + N_("no command is specified"));
> + }
> +
> + builtin = 1;
> + cmdname = args[0];
> + argc--;
> + args++;
> }
> /* Allow user functions to override built in commands. */
> - func = grub_script_function_find (cmdname);
> + if (! builtin)
> + func = grub_script_function_find (cmdname);
> if (! func)
> {
> grub_errno = GRUB_ERR_NONE;
> --
> 1.8.3.2
>
>
> _______________________________________________
> Grub-devel mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel