From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1JL4fY-0005Gg-Kw for mharc-grub-devel@gnu.org; Fri, 01 Feb 2008 17:47:36 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JL4fW-0005Fk-Tg for grub-devel@gnu.org; Fri, 01 Feb 2008 17:47:34 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JL4fW-0005FB-1B for grub-devel@gnu.org; Fri, 01 Feb 2008 17:47:34 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JL4fV-0005F5-Sh for grub-devel@gnu.org; Fri, 01 Feb 2008 17:47:33 -0500 Received: from aybabtu.com ([69.60.117.155]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JL4fV-0007gI-Dl for grub-devel@gnu.org; Fri, 01 Feb 2008 17:47:33 -0500 Received: from [192.168.10.6] (helo=thorin) by aybabtu.com with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1JL4fS-0000zX-1h for grub-devel@gnu.org; Fri, 01 Feb 2008 23:47:32 +0100 Received: from rmh by thorin with local (Exim 4.63) (envelope-from ) id 1JL4dq-000384-SQ for grub-devel@gnu.org; Fri, 01 Feb 2008 23:45:50 +0100 Date: Fri, 1 Feb 2008 23:45:50 +0100 From: Robert Millan To: grub-devel@gnu.org Message-ID: <20080201224550.GA11984@thorin> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="G4iJoqBmSsgzjUCe" Content-Disposition: inline Content-Transfer-Encoding: 8bit Organization: free as in freedom X-Message-Flag: Worried about Outlook viruses? Switch to Thunderbird! www.mozilla.com/thunderbird X-Debbugs-No-Ack: true User-Agent: Mutt/1.5.13 (2006-08-11) X-detected-kernel: by monty-python.gnu.org: Genre and OS details not recognized. Subject: [PATCH] read command X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Feb 2008 22:47:35 -0000 --G4iJoqBmSsgzjUCe Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Implements a BASH-like read command. -- Robert Millan I know my rights; I want my phone call! What use is a phone call… if you are unable to speak? (as seen on /.) --G4iJoqBmSsgzjUCe Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="read.diff" * 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-01 23:44:25.000000000 +0100 @@ -0,0 +1,77 @@ +/* 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 void * +grub_xrealloc (void *ptr, grub_size_t size) +{ + void *value = grub_realloc (ptr, size); + if (value == 0) + grub_fatal ("Virtual memory exhausted"); + return value; +} + +static char * +grub_getline (void) +{ + int i; + char *line; + + 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++; + line = grub_xrealloc (line, 1 + i + sizeof('\0')); + } + 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 (argc > 0) + grub_env_set (args[0], 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-01 22:12:02.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) --G4iJoqBmSsgzjUCe--