[PATCH] qemu-io-cmds: Simplify help_oneline

Dr. David Alan Gilbert (git) posted 1 patch 3 years, 8 months ago
Test docker-quick@centos7 failed
Test checkpatch passed
Test docker-mingw@fedora failed
Test FreeBSD failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200824102914.105619-1-dgilbert@redhat.com
Maintainers: Kevin Wolf <kwolf@redhat.com>, Max Reitz <mreitz@redhat.com>
qemu-io-cmds.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
[PATCH] qemu-io-cmds: Simplify help_oneline
Posted by Dr. David Alan Gilbert (git) 3 years, 8 months ago
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

help_oneline is declared and starts as:

  static void help_oneline(const char *cmd, const cmdinfo_t *ct)
  {
      if (cmd) {
          printf("%s ", cmd);
      } else {
          printf("%s ", ct->name);
          if (ct->altname) {
              printf("(or %s) ", ct->altname);
          }
      }

However, there are only two routes to help_oneline being called:

   help_f -> help_all -> help_oneline(ct->name, ct)

   help_f -> help_onecmd(argv[1], ct)

In the first case, 'cmd' and 'ct->name' are the same thing,
so it's impossible for the if (cmd) to be false and then validly
print ct->name - this is upsetting gcc
( https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96739 )

In the second case, cmd is argv[1] and we know we've got argv[1]
so again (cmd) is non-NULL.

Simplify help_oneline by just printing cmd.
(Also strengthen argc check just to be pedantic)

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 qemu-io-cmds.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
index baeae86d8c..4153f1c0b0 100644
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -2383,14 +2383,7 @@ static const cmdinfo_t sleep_cmd = {
 
 static void help_oneline(const char *cmd, const cmdinfo_t *ct)
 {
-    if (cmd) {
-        printf("%s ", cmd);
-    } else {
-        printf("%s ", ct->name);
-        if (ct->altname) {
-            printf("(or %s) ", ct->altname);
-        }
-    }
+    printf("%s ", cmd);
 
     if (ct->args) {
         printf("%s ", ct->args);
@@ -2420,7 +2413,7 @@ static int help_f(BlockBackend *blk, int argc, char **argv)
 {
     const cmdinfo_t *ct;
 
-    if (argc == 1) {
+    if (argc < 2) {
         help_all();
         return 0;
     }
-- 
2.26.2


Re: [PATCH] qemu-io-cmds: Simplify help_oneline
Posted by Kevin Wolf 3 years, 7 months ago
Am 24.08.2020 um 12:29 hat Dr. David Alan Gilbert (git) geschrieben:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> help_oneline is declared and starts as:
> 
>   static void help_oneline(const char *cmd, const cmdinfo_t *ct)
>   {
>       if (cmd) {
>           printf("%s ", cmd);
>       } else {
>           printf("%s ", ct->name);
>           if (ct->altname) {
>               printf("(or %s) ", ct->altname);
>           }
>       }
> 
> However, there are only two routes to help_oneline being called:
> 
>    help_f -> help_all -> help_oneline(ct->name, ct)
> 
>    help_f -> help_onecmd(argv[1], ct)
> 
> In the first case, 'cmd' and 'ct->name' are the same thing,
> so it's impossible for the if (cmd) to be false and then validly
> print ct->name - this is upsetting gcc
> ( https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96739 )
> 
> In the second case, cmd is argv[1] and we know we've got argv[1]
> so again (cmd) is non-NULL.
> 
> Simplify help_oneline by just printing cmd.
> (Also strengthen argc check just to be pedantic)
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Thanks, applied to the block branch.

Kevin