From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1MXilV-000163-3V for mharc-grub-devel@gnu.org; Sun, 02 Aug 2009 17:38:49 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MXilS-00013H-Ug for grub-devel@gnu.org; Sun, 02 Aug 2009 17:38:46 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MXilO-00011T-Gp for grub-devel@gnu.org; Sun, 02 Aug 2009 17:38:46 -0400 Received: from [199.232.76.173] (port=49750 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MXilO-00011Q-Bc for grub-devel@gnu.org; Sun, 02 Aug 2009 17:38:42 -0400 Received: from xvm-190-8.ghst.net ([217.70.190.8]:45446 helo=aybabtu.com) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MXilN-0006HH-Kz for grub-devel@gnu.org; Sun, 02 Aug 2009 17:38:41 -0400 Received: from [192.168.10.10] (helo=thorin) by aybabtu.com with esmtp (Exim 4.69) (envelope-from ) id 1MXilJ-0003VX-6g for grub-devel@gnu.org; Sun, 02 Aug 2009 23:38:37 +0200 Received: from rmh by thorin with local (Exim 4.69) (envelope-from ) id 1MXilI-00051E-HM for grub-devel@gnu.org; Sun, 02 Aug 2009 23:38:36 +0200 Date: Sun, 2 Aug 2009 23:38:36 +0200 From: Robert Millan To: The development of GRUB 2 Message-ID: <20090802213836.GD15139@thorin> References: <20090801143415.GD22989@thorin> <20090801150529.GD23133@thorin> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="h31gzZEtNLTqOjlF" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: 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.18 (2008-05-17) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Subject: Re: [RFC] Don't pass filename in multiboot command line 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: Sun, 02 Aug 2009 21:38:47 -0000 --h31gzZEtNLTqOjlF Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit On Sat, Aug 01, 2009 at 05:13:27PM +0200, Vladimir 'phcoder' Serbinenko wrote: > >> > There's a much simpler way to address this.  Just add something like: > >> > > >> >  cmdline_argv = argv + 1; > >> >  cmdline_argc = argc - 1; > >> > > >> > at the beginning, and then use cmdline_argv and cmdline_argc instead of > >> > correcting the off-by-one every time. > >> Correcting the numbers is actually smaller part of the patch. The most > >> of it is to make empty commandlines to be handled correctly (this > >> couldn't happen previously) > > > > Either there's an extra argv member that is always present and we want > > to remove, or there's the possibility that the command-line is empty. > > AFAICS we can't have both problems. > > > No. Now we have an extra element that is always present and we want to > remove but when we remove command line can be empty and code must > handle it correctly. Please try this patch. -- Robert Millan The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and how) you may access your data; but nobody's threatening your freedom: we still allow you to remove your data and not access it at all." --h31gzZEtNLTqOjlF Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="cmdline.diff" Index: loader/i386/multiboot.c =================================================================== --- loader/i386/multiboot.c (revision 2465) +++ loader/i386/multiboot.c (working copy) @@ -201,6 +201,8 @@ grub_ssize_t len, cmdline_length, boot_loader_name_length; grub_uint32_t mmap_length; int i; + int cmdline_argc; + char **cmdline_argv; grub_loader_unset (); @@ -256,9 +258,12 @@ mmap_length = grub_get_multiboot_mmap_len (); + cmdline_argv = argv + 1; + cmdline_argc = argc - 1; + /* Figure out cmdline length. */ - for (i = 0, cmdline_length = 0; i < argc; i++) - cmdline_length += grub_strlen (argv[i]) + 1; + for (i = 0, cmdline_length = 0; i < cmdline_argc; i++) + cmdline_length += grub_strlen (cmdline_argv[i]) + 1; boot_loader_name_length = sizeof(PACKAGE_STRING); @@ -351,9 +356,9 @@ if (! cmdline) goto fail; - for (i = 0; i < argc; i++) + for (i = 0; i < cmdline_argc; i++) { - p = grub_stpcpy (p, argv[i]); + p = grub_stpcpy (p, cmdline_argv[i]); *(p++) = ' '; } --h31gzZEtNLTqOjlF--