From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1DV0VR-000882-3J for mharc-grub-devel@gnu.org; Mon, 09 May 2005 01:08:37 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1DV0VL-00083x-Vl for grub-devel@gnu.org; Mon, 09 May 2005 01:08:32 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1DV0VK-00082W-6n for grub-devel@gnu.org; Mon, 09 May 2005 01:08:30 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DV0VK-00082M-1q for grub-devel@gnu.org; Mon, 09 May 2005 01:08:30 -0400 Received: from [207.217.121.183] (helo=pop-a065c05.pas.sa.earthlink.net) by monty-python.gnu.org with esmtp (Exim 4.34) id 1DV0Ze-0000pO-52 for grub-devel@gnu.org; Mon, 09 May 2005 01:12:59 -0400 Received: from user-0vvde2g.cable.mindspring.com ([63.246.184.80] helo=miracle) by pop-a065c05.pas.sa.earthlink.net with esmtp (Exim 3.36 #10) id 1DV0Tk-0000Ax-00 for grub-devel@gnu.org; Sun, 08 May 2005 22:06:52 -0700 Received: from hollis by miracle with local (Exim 3.36 #1 (Debian)) id 1DV0SN-0004oc-00 for ; Mon, 09 May 2005 00:05:27 -0500 Date: Mon, 9 May 2005 00:05:26 -0500 To: grub-devel@gnu.org Message-ID: <20050509050526.GA18510@miracle> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.6+20040907i From: Hollis Blanchard Subject: [ppc] [patch] set environment from commandline 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: Mon, 09 May 2005 05:08:35 -0000 We're doing a lot of useless work in cmain(). Also, this patch allows you to boot from the OF commandline, overriding the defaults. Example: boot enet:,grubof prefix=foo; debug=bar Comments? -Hollis Index: boot/powerpc/ieee1275/cmain.c =================================================================== RCS file: /cvsroot/grub/grub2/boot/powerpc/ieee1275/cmain.c,v retrieving revision 1.7 diff -u -p -r1.7 cmain.c --- boot/powerpc/ieee1275/cmain.c 1 May 2005 03:45:35 -0000 1.7 +++ boot/powerpc/ieee1275/cmain.c 9 May 2005 05:01:07 -0000 @@ -71,15 +71,9 @@ grub_ieee1275_find_options (void) } void cmain (uint32_t r3, uint32_t r4, uint32_t r5); -/* Setup the argument vector and pass control over to the main - function. */ void cmain (uint32_t r3, uint32_t r4 __attribute__((unused)), uint32_t r5) { - char **argv, args[256]; - grub_ieee1275_phandle_t chosen; - int argc = 0, actual; - if (r5 == 0xdeadbeef) { /* Entered from Old World stage1. */ @@ -106,70 +100,7 @@ cmain (uint32_t r3, uint32_t r4 __attrib grub_ieee1275_find_options (); - /* If any argument was passed to the kernel (us), they are - put in the bootargs property of /chosen. The string can - be null (just the nul-character), so check that the size - is actually greater than one. */ - - grub_ieee1275_finddevice ("/chosen", &chosen); - if (grub_ieee1275_get_property (chosen, "bootargs", args, - sizeof args, &actual) == 0 - && actual > 1) - { - /* A command line was passed. */ - char *str = args; - int nr = 1; - - /* First time around we count the number of arguments. */ - argc = 2; - while (*str && *str == ' ') - str++; - - while (*str) - if (*(str++) == ' ') - { - while (*str && *str == ' ') - str++; - if (*str) - argc++; - } - argv = alloca (sizeof (char *) * (argc + 2)); - - /* The bootargs property does not contain the program - name, just the arguments. */ - argv[0] = "grub"; - - /* Second time around we fill in the argv. */ - str = args; - - while (*str && *str == ' ') - str++; - argv[nr++] = str; - - while (*str) - { - if (*str == ' ') - { - *(str++) = '\0'; - while (*str && *str == ' ') - str++; - if (*str) - argv[nr++] = str; - } - else - str++; - } - argv[nr] = 0; - } - else - { - argv = alloca (sizeof (char *) * 2); - argv[0] = "grub"; - argv[1] = 0; - argc = 1; - } /* Now invoke the main function. */ - /* XXX: grub_main does not parse arguments yet. */ grub_main (); /* Never reached. */ Index: kern/powerpc/ieee1275/init.c =================================================================== RCS file: /cvsroot/grub/grub2/kern/powerpc/ieee1275/init.c,v retrieving revision 1.17 diff -u -p -r1.17 init.c --- kern/powerpc/ieee1275/init.c 1 May 2005 03:45:36 -0000 1.17 +++ kern/powerpc/ieee1275/init.c 9 May 2005 05:01:13 -0000 @@ -113,6 +113,9 @@ grub_set_prefix (void) void grub_machine_init (void) { + char args[256]; + grub_ieee1275_phandle_t chosen; + int actual; extern char _start; grub_console_init (); @@ -132,6 +135,41 @@ grub_machine_init (void) grub_set_prefix (); grub_ofdisk_init (); + + /* Process commandline. */ + grub_ieee1275_finddevice ("/chosen", &chosen); + if (grub_ieee1275_get_property (chosen, "bootargs", &args, + sizeof args, &actual) == 0 + && actual > 1) + { + int i = 0; + + while (i < actual) + { + char *command = &args[i]; + char *end; + char *val; + + end = grub_strchr (command, ';'); + if (end == 0) + i = actual; /* No more commands after this one. */ + else + { + *end = '\0'; + i += end - command + 1; + while (grub_isspace(args[i])) + i++; + } + + /* Process command. */ + val = grub_strchr (command, '='); + if (val) + { + *val = '\0'; + grub_env_set (command, val + 1); + } + } + } } void