* commands/read.c: New file. * conf/common.rmk (pkglib_MODULES): Add `commands/read.c'. (read_mod_SOURCES): New variable. (read_mod_CFLAGS): Likewise. (read_mod_LDFLAGS): Likewise. diff -x CVS -x '*~' -x '*.mk' -urp -N ../grub2/commands/read.c ./commands/read.c --- ../grub2/commands/read.c 1970-01-01 01:00:00.000000000 +0100 +++ ./commands/read.c 2008-02-02 18:02:31.000000000 +0100 @@ -0,0 +1,79 @@ +/* read.c - Command to read variables from user. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +static char * +grub_getline (void) +{ + int i; + char *line; + char *tmp; + + i = 0; + line = grub_malloc (1 + i + sizeof('\0')); + + while ((line[i - 1] != '\n') && (line[i - 1] != '\r')) + { + line[i] = grub_getkey (); + if (grub_isprint (line[i])) + grub_putchar (line[i]); + i++; + tmp = grub_realloc (line, 1 + i + sizeof('\0')); + if (! tmp) + { + grub_free (line); + return NULL; + } + line = tmp; + } + line[i] = '\0'; + + return line; +} + +static grub_err_t +grub_cmd_read (struct grub_arg_list *state UNUSED, int argc, char **args) +{ + char *line = grub_getline (); + if (! line) + return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Out of memory"); + if (argc > 0) + grub_env_set (args[0], line); + + grub_free (line); + return 0; +} + + +GRUB_MOD_INIT(read) +{ + grub_register_command ("read", grub_cmd_read, GRUB_COMMAND_FLAG_CMDLINE, + "read [ENVVAR]", "Set variable with user input", 0); +} + +GRUB_MOD_FINI(read) +{ + grub_unregister_command ("read"); +} diff -x CVS -x '*~' -x '*.mk' -urp -N ../grub2/conf/common.rmk ./conf/common.rmk --- ../grub2/conf/common.rmk 2008-01-30 16:32:55.000000000 +0100 +++ ./conf/common.rmk 2008-02-02 17:54:35.000000000 +0100 @@ -231,7 +231,8 @@ lvm_mod_LDFLAGS = $(COMMON_LDFLAGS) pkglib_MODULES += hello.mod boot.mod terminal.mod ls.mod \ cmp.mod cat.mod help.mod font.mod search.mod \ loopback.mod configfile.mod echo.mod \ - terminfo.mod test.mod blocklist.mod hexdump.mod + terminfo.mod test.mod blocklist.mod hexdump.mod \ + read.mod # For hello.mod. hello_mod_SOURCES = hello/hello.c @@ -326,5 +327,7 @@ gzio_mod_SOURCES = io/gzio.c gzio_mod_CFLAGS = $(COMMON_CFLAGS) gzio_mod_LDFLAGS = $(COMMON_LDFLAGS) - - +# For read.mod. +read_mod_SOURCES = commands/read.c +read_mod_CFLAGS = $(COMMON_CFLAGS) +read_mod_LDFLAGS = $(COMMON_LDFLAGS)