From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1YMNUA-0002fR-01 for mharc-grub-devel@gnu.org; Fri, 13 Feb 2015 16:09:14 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43896) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YMNU6-0002f1-Hi for grub-devel@gnu.org; Fri, 13 Feb 2015 16:09:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YMNU3-0005od-0E for grub-devel@gnu.org; Fri, 13 Feb 2015 16:09:10 -0500 Received: from poivron.org ([91.194.60.101]:52803 helo=mail.poivron.org) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YMNU2-0005o1-MX for grub-devel@gnu.org; Fri, 13 Feb 2015 16:09:06 -0500 Received: from [127.0.0.1] (localhost [127.0.0.1]) with ESMTPSA id E8A55C09F9E Date: Fri, 13 Feb 2015 22:09:04 +0100 From: Lunar To: The development of GNU GRUB Subject: Re: [bug #44238] Add support for menu.c32 and vesamenu.c32 in lib/syslinux_parse Message-ID: <20150213210904.GH688@loar> References: <20150213-163409.sv98365.64186@savannah.gnu.org> <20150213-190108.sv89796.21318@savannah.gnu.org> <20150213202023.GF688@loar> <20150213234024.48b03da1@opensuse.site> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="1X+6QtwRodzgDPAC" Content-Disposition: inline In-Reply-To: <20150213234024.48b03da1@opensuse.site> User-Agent: Mutt/1.5.23 (2014-03-12) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 91.194.60.101 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Feb 2015 21:09:12 -0000 --1X+6QtwRodzgDPAC Content-Type: multipart/mixed; boundary="pWJxWxNlJUNgDlXi" Content-Disposition: inline --pWJxWxNlJUNgDlXi Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Andrei Borzenkov: > [=E2=80=A6 review and comments =E2=80=A6] Ok, here's another try. --=20 Lunar --pWJxWxNlJUNgDlXi Content-Type: text/x-diff; charset=us-ascii Content-Disposition: inline; filename="0001-lib-syslinux_parse-add-support-for-vesa-menu.c32.patch" Content-Transfer-Encoding: quoted-printable =46rom 9ce42bf6373bdf4c8c66e897e8b00908b5df03bf Mon Sep 17 00:00:00 2001 =46rom: Lunar Date: Fri, 13 Feb 2015 22:08:11 +0100 Subject: [PATCH] lib/syslinux_parse: add support for (vesa)menu.c32 Fixes Savannah bug #44238. --- grub-core/lib/syslinux_parse.c | 165 ++++++++++++++++++++++++++-----------= ---- 1 file changed, 107 insertions(+), 58 deletions(-) diff --git a/grub-core/lib/syslinux_parse.c b/grub-core/lib/syslinux_parse.c index 2c874b1..432456e 100644 --- a/grub-core/lib/syslinux_parse.c +++ b/grub-core/lib/syslinux_parse.c @@ -840,6 +840,82 @@ simplify_filename (char *str) } =20 static grub_err_t +print_config (struct output_buffer *outbuf, + struct syslinux_menu *menu, + const char *filename, const char *basedir) +{ + struct syslinux_menu *menuptr; + grub_err_t err =3D GRUB_ERR_NONE; + char *new_cwd =3D NULL; + char *new_target_cwd =3D NULL; + char *newname =3D NULL; + int depth =3D 0; + + new_cwd =3D get_read_filename (menu, basedir); + if (!new_cwd) + { + err =3D grub_errno; + goto out; + } + new_target_cwd =3D get_target_filename (menu, basedir); + if (!new_target_cwd) + { + err =3D grub_errno; + goto out; + } + newname =3D get_read_filename (menu, filename); + if (!newname) + { + err =3D grub_errno; + goto out; + } + simplify_filename (newname); + + print_string ("#"); + print_file (outbuf, menu, filename, NULL); + print_string (" "); + print (outbuf, newname, grub_strlen (newname)); + print_string (":\n"); + + for (menuptr =3D menu; menuptr; menuptr =3D menuptr->parent, depth++) + if (grub_strcmp (menuptr->filename, newname) =3D=3D 0 + || depth > 20) + break; + if (menuptr) + { + print_string (" syslinux_configfile -r "); + print_file (outbuf, menu, "/", NULL); + print_string (" -c "); + print_file (outbuf, menu, basedir, NULL); + print_string (" "); + print_file (outbuf, menu, filename, NULL); + print_string ("\n"); + } + else + { + err =3D config_file (outbuf, menu->root_read_directory, + menu->root_target_directory, new_cwd, new_target_= cwd, + newname, menu, menu->flavour); + if (err =3D=3D GRUB_ERR_FILE_NOT_FOUND + || err =3D=3D GRUB_ERR_BAD_FILENAME) + { + grub_errno =3D err =3D GRUB_ERR_NONE; + print_string ("# File "); + err =3D print (outbuf, newname, grub_strlen (newname)); + if (err) + goto out; + print_string (" not found\n"); + } + } + + out: + grub_free (newname); + grub_free (new_cwd); + grub_free (new_target_cwd); + return err; +} + +static grub_err_t write_entry (struct output_buffer *outbuf, struct syslinux_menu *menu, struct syslinux_menuentry *curentry) @@ -1240,6 +1316,36 @@ write_entry (struct output_buffer *outbuf, break; } =20 + if (grub_strcasecmp (basename, "menu.c32") =3D=3D 0 || + grub_strcasecmp (basename, "vesamenu.c32") =3D=3D 0) + { + char *ptr; + char *end; + + ptr =3D curentry->append; + if (!ptr) + return grub_errno; + + while (*ptr) + { + end =3D ptr; + for (end =3D ptr; *end && !grub_isspace (*end); end++); + if (*end) + *end++ =3D '\0'; + + /* "~" is supposed to be current file, so let's skip it */ + if (grub_strcmp (ptr, "~") !=3D 0) + { + err =3D print_config (outbuf, menu, ptr, ""); + if (err !=3D GRUB_ERR_NONE) + break; + } + for (ptr =3D end; *ptr && grub_isspace (*ptr); ptr++); + } + err =3D GRUB_ERR_NONE; + break; + } + /* FIXME: gdb, GFXBoot, Hdt, Ifcpu, Ifplop, Kbdmap, FIXME: Linux, Lua, Meminfo, rosh, Sanbboot */ =20 @@ -1252,70 +1358,13 @@ write_entry (struct output_buffer *outbuf, } case KERNEL_CONFIG: { - char *new_cwd, *new_target_cwd; const char *ap; ap =3D curentry->append; if (!ap) ap =3D curentry->argument; if (!ap) ap =3D ""; - new_cwd =3D get_read_filename (menu, ap); - if (!new_cwd) - return grub_errno; - new_target_cwd =3D get_target_filename (menu, ap); - if (!new_target_cwd) - return grub_errno; - - struct syslinux_menu *menuptr; - char *newname; - int depth =3D 0; -=09 - newname =3D get_read_filename (menu, curentry->kernel_file); - if (!newname) - return grub_errno; - simplify_filename (newname); - - print_string ("#"); - print_file (outbuf, menu, curentry->kernel_file, NULL); - print_string (" "); - print (outbuf, newname, grub_strlen (newname)); - print_string (":\n"); - - for (menuptr =3D menu; menuptr; menuptr =3D menuptr->parent, depth++) - if (grub_strcmp (menuptr->filename, newname) =3D=3D 0 - || depth > 20) - break; - if (menuptr) - { - print_string (" syslinux_configfile -r "); - print_file (outbuf, menu, "/", NULL); - print_string (" -c "); - print_file (outbuf, menu, ap, NULL); - print_string (" "); - print_file (outbuf, menu, curentry->kernel_file, NULL); - print_string ("\n"); - } - else - { - err =3D config_file (outbuf, menu->root_read_directory, - menu->root_target_directory, new_cwd, new_target_cwd, - newname, menu, menu->flavour); - if (err =3D=3D GRUB_ERR_FILE_NOT_FOUND - || err =3D=3D GRUB_ERR_BAD_FILENAME) - { - grub_errno =3D err =3D GRUB_ERR_NONE; - print_string ("# File "); - err =3D print (outbuf, newname, grub_strlen (newname)); - if (err) - return err; - print_string (" not found\n"); - } - if (err) - return err; - } - grub_free (newname); - grub_free (new_cwd); - grub_free (new_target_cwd); + print_config (outbuf, menu, curentry->kernel_file, ap); } break; case KERNEL_NO_KERNEL: --=20 1.9.1 --pWJxWxNlJUNgDlXi-- --1X+6QtwRodzgDPAC Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJU3mfpAAoJEEAsIlA9Nuk2CQ8P/0TYrXogyLu+DrtrEr8C5KsY CL0lCkw05tnpZEIPxbBQTjY4U/NVKtNUom+y9nZtfpcFYmndJMl3U5OKtZmkljqN fNtXvFuUt7mGm3GLMtInoyBNGeQ4LzxPxTRlgn+W1YmqKJ1DevPS2XSix00HvwKC pNKaUil6FPrDqgiXGRTDk+qNvNRW9JmlQkxG9CDG4HHX5lw/er2Jb4cyMXRCTiFA xFWcniTG2IlyPd4MnzrKmc1EcLE1IkBQml6Uj4z0gi0WKouyUH8txcyQ8eQDKYu9 Z2ir0x/s9au9SQWw6P4yxOFww0vT6+pQMUbBb9jo+g0nZXwZkHwDvEAI0v9niFJx PX5OBWnIeib+/kYl1WKiFIy1tLPGy/3ccHEuZ41SujsQsbUz/kslWsxPvStF4aTa ybox1lYEczII0Igi1GGTQNBHWnnqKSWOaNy4+v5hJFW/5dTcCmMj/4uPVwqNVI0J Wk+HDErH+2/WyQ8kJZOw21pbblLUrGEvEwhxwtPBOG1hMEVr/KshJrTEjU0sbsZQ hv/dqI8TOj2LHU57pFB/ApoBRwqekyQYsgb4J7p/HQ42VHu7NBVDWjopDXzciWdM PIpPyZ8OQm5p2tF8Ft6jhLIs62aj7bE3SURRazyhGHUVFNaKZnTd52fQs8uymVYu tYF5AuL6leCGz+OSZM+y =v/WC -----END PGP SIGNATURE----- --1X+6QtwRodzgDPAC--