From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Xcemk-000233-OC for mharc-grub-devel@gnu.org; Fri, 10 Oct 2014 14:19:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37273) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xcemb-000212-5F for grub-devel@gnu.org; Fri, 10 Oct 2014 14:19:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XcemS-00032U-4d for grub-devel@gnu.org; Fri, 10 Oct 2014 14:19:17 -0400 Received: from mail-lb0-x22c.google.com ([2a00:1450:4010:c04::22c]:37185) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XcemR-00032A-No for grub-devel@gnu.org; Fri, 10 Oct 2014 14:19:08 -0400 Received: by mail-lb0-f172.google.com with SMTP id b6so3605079lbj.31 for ; Fri, 10 Oct 2014 11:19:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=XGZcxHU2A//PZn2TRU0o+/GoEV5sKWNP0cx0zHT58iQ=; b=gQRhpiMw2jkAJVA+Mpx50Gj4xME75KAESc3QeTUfP6PWRAseUmkVAGjRdMEOFiTIiA 2zcp8cdoK0wFJYr4APotPuLMNHhDpfjgcwMN+Z25xRnMmsf3IiB1Kqst+bAy8sniaGj/ wr2y/aZuMuIXKcoR2SRob4UJ2CvVMfM/CcJf4MKu/kPh3hFSOj2LsnGUm/1FG3oRCxZB JebSf+Vpuw4IMrjgzzTG5VZM6wdQfjwH4Wp018P4lGFerC6/Ky5tc0yiSSmyYYmGBgjX GHvsrUc3cROhJfIaLZNiUPcJfVe4eaOJGj5yyUDfztN4iDqyD6ft5/cvGyrGQxSBlN50 cONg== X-Received: by 10.152.205.9 with SMTP id lc9mr6569245lac.37.1412965146351; Fri, 10 Oct 2014 11:19:06 -0700 (PDT) Received: from opensuse.site (ppp94-29-94-89.pppoe.spdop.ru. [94.29.94.89]) by mx.google.com with ESMTPSA id oh4sm2022609lbc.19.2014.10.10.11.19.05 for (version=SSLv3 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 10 Oct 2014 11:19:05 -0700 (PDT) Date: Fri, 10 Oct 2014 22:19:04 +0400 From: Andrei Borzenkov To: The development of GNU GRUB Subject: Re: About the CLI of both grub-mkrescue versions Message-ID: <20141010221904.4a602eff@opensuse.site> In-Reply-To: <1495546211684188288@scdbackup.webframe.org> References: <26976546057851911994@scdbackup.webframe.org> <1495546211684188288@scdbackup.webframe.org> X-Mailer: Claws Mail 3.9.2 (GTK+ 2.24.23; x86_64-suse-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c04::22c Cc: scdbackup@gmx.net 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, 10 Oct 2014 18:19:26 -0000 =D0=92 Wed, 01 Oct 2014 09:25:12 +0200 "Thomas Schmitt" =D0=BF=D0=B8=D1=88=D0=B5=D1=82: > Hi, >=20 > to substantiate my proposal of renaming young grub-mkrescue.c to > grub-mkiso.c and to add a built-in emulation of grub-mkrescue(.in), > here the necessary code which i tested standalone with valgrind. Well, below is much more simple patch which is reusing argp infrastructure. The only problem - it needs small patch for gnulib otherwise --help does not work. IMHO this is a bug in gnulib. If you convince them to fix it ... I do not say that I particular like it, but looks better than reimplement parser from scratch. --- grub-core/gnulib/argp-parse.c | 7 +++++-- util/grub-mkrescue.c | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/grub-core/gnulib/argp-parse.c b/grub-core/gnulib/argp-parse.c index 67ea32c..8fb50e1 100644 --- a/grub-core/gnulib/argp-parse.c +++ b/grub-core/gnulib/argp-parse.c @@ -89,13 +89,16 @@ static const struct argp_option argp_default_options[] = =3D static error_t argp_default_parser (int key, char *arg, struct argp_state *state) { + struct argp_state help_state =3D *state; + + help_state.flags &=3D ~ARGP_NO_ERRS; switch (key) { case '?': - __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP); + __argp_state_help (&help_state, state->out_stream, ARGP_HELP_STD_HEL= P); break; case OPT_USAGE: - __argp_state_help (state, state->out_stream, + __argp_state_help (&help_state, state->out_stream, ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); break; =20 diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c index e719839..8decb4e 100644 --- a/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c @@ -70,6 +70,19 @@ xorriso_push (const char *val) } =20 static void +xorriso_push_tail (const char *val) +{ + if (xorriso_tail_arg_alloc <=3D xorriso_tail_argc) + { + xorriso_tail_arg_alloc =3D 2 * (4 + xorriso_tail_argc); + xorriso_tail_argv =3D xrealloc (xorriso_tail_argv, + sizeof (xorriso_tail_argv[0]) + * xorriso_tail_arg_alloc); + } + xorriso_tail_argv[xorriso_tail_argc++] =3D xstrdup (val); +} + +static void xorriso_link (const char *from, const char *to) { char *tof =3D grub_util_path_concat (2, iso9660_dir, to); @@ -156,6 +169,12 @@ enum { static error_t=20 argp_parser (int key, char *arg, struct argp_state *state) { + if (state->quoted && !(int *)state->input) + { + *(int *)state->input =3D 1; + xorriso_push_tail ("--"); + } + if (grub_install_parse (key, arg)) return 0; switch (key) @@ -216,14 +235,7 @@ argp_parser (int key, char *arg, struct argp_state *st= ate) return 0; =20 case ARGP_KEY_ARG: - if (xorriso_tail_arg_alloc <=3D xorriso_tail_argc) - { - xorriso_tail_arg_alloc =3D 2 * (4 + xorriso_tail_argc); - xorriso_tail_argv =3D xrealloc (xorriso_tail_argv, - sizeof (xorriso_tail_argv[0]) - * xorriso_tail_arg_alloc); - } - xorriso_tail_argv[xorriso_tail_argc++] =3D xstrdup (arg); + xorriso_push_tail (arg); return 0; default: return ARGP_ERR_UNKNOWN; @@ -380,6 +392,8 @@ main (int argc, char *argv[]) char *romdir; char *sysarea_img =3D NULL; const char *pkgdatadir; + int quote_seen =3D 0; + int unknown; =20 grub_util_host_init (&argc, &argv); grub_util_disable_fd_syncs (); @@ -391,7 +405,12 @@ main (int argc, char *argv[]) xorriso =3D xstrdup ("xorriso"); label_font =3D grub_util_path_concat (2, pkgdatadir, "unicode.pf2"); =20 - argp_parse (&argp, argc, argv, 0, 0, 0); + while (argc > 0 && argp_parse (&argp, argc, argv, ARGP_NO_ERRS, &unknown= , "e_seen)) + { + xorriso_push_tail (argv[unknown]); + argv +=3D unknown; + argc -=3D unknown; + } =20 if (!output_image) grub_util_error ("%s", _("output file must be specified")); --=20 tg: (77063f4..) u/grub-mkrescue-options (depends on: master)