All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Michael Tokarev <mjt@tls.msk.ru>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [PATCH 03/27] qemu-img: global option processing and error printing
Date: Tue, 5 Nov 2024 20:29:04 +0100	[thread overview]
Message-ID: <ZypyAOakh3cM9KDz@redhat.com> (raw)
In-Reply-To: <20240927061121.573271-4-mjt@tls.msk.ru>

Am 27.09.2024 um 08:10 hat Michael Tokarev geschrieben:
> In order to correctly print executable name in various
> error messages, pass argv[0] to error_exit() function.
> This way, error messages will refer to actual executable
> name, which may be different from 'qemu-img'.
> 
> For subcommands, pass original command name from the
> qemu-img argv[0], plus the subcommand name, as its own
> argv[0] element, so error messages can be more useful.
> Also don't require at least 3 options on the command
> line: it makes no sense with options before subcommand.
> 
> Introduce tryhelp() function which just prints
> 
>  try 'command-name --help' for more info
> 
> and exits.  When tryhelp() is called from within a subcommand
> handler, the message will look like:
> 
>  try 'command-name subcommand --help' for more info
> 
> qemu-img uses getopt_long() with ':' as the first char in
> optstring parameter, which means it doesn't print error
> messages but return ':' or '?' instead, and qemu-img uses
> unrecognized_option() or missing_argument() function to
> print error messages.  But it doesn't quite work:
> 
>  $ ./qemu-img -xx
>  qemu-img: unrecognized option './qemu-img'
> 
> so the aim is to let getopt_long() to print regular error
> messages instead (removing ':' prefix from optstring) and
> remove handling of '?' and ':' "options" entirely.  With
> concatenated argv[0] and the subcommand, it all finally
> does the right thing in all cases.  This will be done in
> subsequent changes command by command, with main() done
> last.
> 
> unrecognized_option() and missing_argument() functions
> prototypes aren't changed by this patch, since they're
> called from many places and will be removed a few patches
> later.  Only artifical "qemu-img" argv0 is provided in
> there for now.
> 
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
>  qemu-img.c | 80 +++++++++++++++++++++++++++++-------------------------
>  1 file changed, 43 insertions(+), 37 deletions(-)
> 
> diff --git a/qemu-img.c b/qemu-img.c
> index fe22986931..130188e287 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -101,8 +101,15 @@ static void format_print(void *opaque, const char *name)
>      printf(" %s", name);
>  }
>  
> -static G_NORETURN G_GNUC_PRINTF(1, 2)
> -void error_exit(const char *fmt, ...)
> +static G_NORETURN
> +void tryhelp(const char *argv0)
> +{
> +    error_printf("Try '%s --help' for more info\n", argv0);
> +    exit(EXIT_FAILURE);
> +}
> +
> +static G_NORETURN G_GNUC_PRINTF(2, 3)
> +void error_exit(const char *argv0, const char *fmt, ...)
>  {
>      va_list ap;
>  
> @@ -110,20 +117,19 @@ void error_exit(const char *fmt, ...)
>      error_vreport(fmt, ap);
>      va_end(ap);
>  
> -    error_printf("Try 'qemu-img --help' for more information\n");
> -    exit(EXIT_FAILURE);
> +    tryhelp(argv0);
>  }

No reason to change "information" into the more colloquial "info". I
would leave it as it is.

Apart from that:
Reviewed-by: Kevin Wolf <kwolf@redhat.com>



  reply	other threads:[~2024-11-05 19:29 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-27  6:10 [PATCH resend v3 00/27] qemu-img: refersh options and --help handling, cleanups Michael Tokarev
2024-09-27  6:10 ` [PATCH 01/27] qemu-img: measure: convert img_size to signed, simplify handling Michael Tokarev
2024-11-05 19:27   ` Kevin Wolf
2024-09-27  6:10 ` [PATCH 02/27] qemu-img: create: " Michael Tokarev
2024-11-05 19:27   ` Kevin Wolf
2024-09-27  6:10 ` [PATCH 03/27] qemu-img: global option processing and error printing Michael Tokarev
2024-11-05 19:29   ` Kevin Wolf [this message]
2024-09-27  6:10 ` [PATCH 04/27] qemu-img: pass current cmd info into command handlers Michael Tokarev
2024-11-05 19:29   ` Kevin Wolf
2024-09-27  6:10 ` [PATCH 05/27] qemu-img: create: refresh options/--help Michael Tokarev
2024-11-05 19:57   ` Kevin Wolf
2024-09-27  6:11 ` [PATCH 06/27] qemu-img: factor out parse_output_format() and use it in the code Michael Tokarev
2025-05-13 15:25   ` Kevin Wolf
2024-09-27  6:11 ` [PATCH 07/27] qemu-img: check: refresh options/--help Michael Tokarev
2025-05-13 15:54   ` Kevin Wolf
2025-05-15  6:50     ` Michael Tokarev
2025-05-15  7:53       ` Kevin Wolf
2025-05-31 16:51     ` Michael Tokarev
2025-06-02 10:44       ` Kevin Wolf
2024-09-27  6:11 ` [PATCH 08/27] qemu-img: simplify --repair error message Michael Tokarev
2025-05-13 16:05   ` Kevin Wolf
2024-09-27  6:11 ` [PATCH 09/27] qemu-img: commit: refresh options/--help Michael Tokarev
2025-05-13 16:24   ` Kevin Wolf
2024-09-27  6:11 ` [PATCH 10/27] qemu-img: compare: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 11/27] qemu-img: convert: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 12/27] qemu-img: info: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 13/27] qemu-img: map: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 14/27] qemu-img: snapshot: allow specifying -f fmt Michael Tokarev
2024-09-27  6:11 ` [PATCH 15/27] qemu-img: snapshot: make -l (list) the default, simplify option handling Michael Tokarev
2024-09-27  6:11 ` [PATCH 16/27] qemu-img: snapshot: refresh options/--help Michael Tokarev
2024-09-27  6:11 ` [PATCH 17/27] qemu-img: rebase: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 18/27] qemu-img: resize: do not always eat last argument Michael Tokarev
2024-09-27  6:11 ` [PATCH 19/27] qemu-img: resize: refresh options/--help Michael Tokarev
2024-09-27  6:11 ` [PATCH 20/27] qemu-img: amend: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 21/27] qemu-img: bench: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 22/27] qemu-img: bitmap: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 23/27] qemu-img: dd: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 24/27] qemu-img: measure: " Michael Tokarev
2024-09-27  6:11 ` [PATCH 25/27] qemu-img: implement short --help, remove global help() function Michael Tokarev
2024-09-27  6:11 ` [PATCH 26/27] qemu-img: inline list of supported commands, remove qemu-img-cmds.h include Michael Tokarev
2024-09-27  6:11 ` [PATCH 27/27] qemu-img: extend cvtnum() and use it in more places Michael Tokarev
2024-10-23  6:15 ` [PATCH resend v3 00/27] qemu-img: refersh options and --help handling, cleanups Michael Tokarev
  -- strict thread matches above, loose matches on Subject: below --
2025-05-31 17:15 [PATCH v4 00/27] refresh qemu-img options handling Michael Tokarev
2025-05-31 17:15 ` [PATCH 03/27] qemu-img: global option processing and error printing Michael Tokarev
2024-04-24  8:50 [PATCH v3 00/27] qemu-img: refersh options and --help handling, cleanups Michael Tokarev
2024-04-24  8:50 ` [PATCH 03/27] qemu-img: global option processing and error printing Michael Tokarev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZypyAOakh3cM9KDz@redhat.com \
    --to=kwolf@redhat.com \
    --cc=mjt@tls.msk.ru \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.