Hi, Dave
Thanks for your improvement.
On Fri, Jul 7, 2023 at 2:17 PM <crash-utility-request(a)redhat.com> wrote:
 Date: Thu,  6 Jul 2023 10:53:18 -0400
 From: Dave Wysochanski <dwysocha(a)redhat.com>
 To: crash-utility(a)redhat.com
 Cc: dwysocha(a)redhat.com,        amakhalov(a)vmware.com,   soakley(a)redhat.com
 Subject: [Crash-utility] [PATCH] vmware: Improve output when we fail
         to read vmware 'vmsn' file
 Message-ID: <20230706145318.731449-1-dwysocha(a)redhat.com>
 Today if crash fails to read some structure in a vmware 'vmsn' file,
 it will throw an "No such file or directory" message.  Such a generic
 message does not give any clue as to the problem, but instead sounds
 like the file may not exist when it does, for example:
   $ crash ./vmcore.vmsn  ./vmlinux
   crash 8.0.3
   ...
   crash: vmw: Failed to read './vmcore.vmsn': [Error 2] No such file or
 directory
   crash: ./vmcore.vmsn: initialization failed
   $ ls -l ./vmcore.vmsn
   -rwxrwxrwx. 7 myuser mygroup 12128999 Jul  4 07:21 ./vmcore.vmsn
 Improve the above error message so we at least know which portion
 of the file crash had difficulty reading.  After this patch, the
 above error looks like:
   crash: vmw: Failed to read 'cptgroupdesc' from file './vmcore.vmsn':
 [Error 2] No such file or directory
 Signed-off-by: Dave Wysochanski <dwysocha(a)redhat.com>
 ---
  vmware_guestdump.c |  8 ++++----
  vmware_vmss.c      | 24 ++++++++++++------------
  2 files changed, 16 insertions(+), 16 deletions(-)
 diff --git a/vmware_guestdump.c b/vmware_guestdump.c
 index cf818e588a60..5be26c8e2e90 100644
 --- a/vmware_guestdump.c
 +++ b/vmware_guestdump.c
 @@ -117,8 +117,8 @@ is_vmware_guestdump(char *filename)
          }
         if (fread(&hdr, sizeof(struct guestdumpheader), 1, fp) != 1) {
 -               error(INFO, LOGPRX"Failed to read '%s': [Error %d]
%s\n",
 -                     filename, errno, strerror(errno));
 +               error(INFO, LOGPRX"Failed to read '%s' from file
'%s':
 [Error %d] %s\n",
 +                     "guestdumpheader", filename, errno, strerror(errno));
                 fclose(fp);
                 return FALSE;
         }
 @@ -204,8 +204,8 @@ vmware_guestdump_init(char *filename, FILE *ofp)
         for (i = 0; i < vmss.num_vcpus; i++) {
                 if (fread(&vs, sizeof(struct vcpu_state), 1, fp) != 1) {
 -                       error(INFO, LOGPRX"Failed to read '%s': [Error %d]
 %s\n",
 -                                       filename, errno, strerror(errno));
 +                       error(INFO, LOGPRX"Failed to read '%s' from file
 '%s': [Error %d] %s\n",
 +                                       "vcpu_state", filename, errno,
 strerror(errno));
                         result = FALSE;
                         goto exit;
                 }
 diff --git a/vmware_vmss.c b/vmware_vmss.c
 index f6c5f32ea4c0..8121ab64a99a 100644
 --- a/vmware_vmss.c
 +++ b/vmware_vmss.c
 @@ -39,8 +39,8 @@ is_vmware_vmss(char *filename)
          }
         if (fread(&hdr, sizeof(cptdumpheader), 1, fp) != 1) {
 -               error(INFO, LOGPRX"Failed to read '%s': [Error %d]
%s\n",
 -                     filename, errno, strerror(errno));
 +               error(INFO, LOGPRX"Failed to read '%s' from file
'%s':
 [Error %d] %s\n",
 +                     "cptdumpheader", filename, errno, strerror(errno));
                 fclose(fp);
                 return FALSE;
         }
 @@ -86,8 +86,8 @@ vmware_vmss_init(char *filename, FILE *ofp)
          }
         if (fread(&hdr, sizeof(cptdumpheader), 1, fp) != 1) {
 -               error(INFO, LOGPRX"Failed to read '%s': %s [Error %d]
 %s\n",
 -                      filename, errno, strerror(errno));
 +               error(INFO, LOGPRX"Failed to read '%s' from file
'%s':
 [Error %d] %s\n",
 +                     "cptdumpheader", filename, errno, strerror(errno));
                 result = FALSE;
                 goto exit;
         }
 @@ -112,8 +112,8 @@ vmware_vmss_init(char *filename, FILE *ofp)
         }
         if (fread(grps, sizeof(cptgroupdesc), grpsize, fp) != grpsize) {
 -               error(INFO, LOGPRX"Failed to read '%s': [Error %d]
%s\n",
 -                     filename, errno, strerror(errno));
 +               error(INFO, LOGPRX"Failed to read '%s' from file
'%s':
 [Error %d] %s\n",
 +                     "cptgroupdesc", filename, errno, strerror(errno));
 
                            ^^^^^^^^^^^^
Although the above code is good, I tend to output constant strings directly
rather than using the '%s' to print.
Anyway, the other changes still look fine to me. So: Ack.
Thanks
Lianbo
                result = FALSE;
                 goto exit;
         }
 @@ -225,8 +225,8 @@ vmware_vmss_init(char *filename, FILE *ofp)
                                            idx[0] < vmss.num_vcpus) {
                                         int cpu = idx[0];
                                         if (fread(vmss.regs64[cpu],
 VMW_GPREGS_SIZE, 1, fp) != 1) {
 -                                               error(INFO, LOGPRX"Failed
 to read '%s': [Error %d] %s\n",
 -                                                     filename, errno,
 strerror(errno));
 +                                               error(INFO, LOGPRX"Failed
 to read '%s' from file '%s': [Error %d] %s\n",
 +                                                     name, filename,
 errno, strerror(errno));
                                                 break;
                                         }
                                         DEBUG_PARSE_PRINT((ofp, "\n"));
 @@ -237,8 +237,8 @@ vmware_vmss_init(char *filename, FILE *ofp)
                                         int cpu = idx[0];
                                         DEBUG_PARSE_PRINT((ofp, "\t=> "));
                                         if
 (fread(&vmss.regs64[cpu]->cr[0], VMW_CR64_SIZE, 1, fp) != 1) {
 -                                               error(INFO, LOGPRX"Failed
 to read '%s': [Error %d] %s\n",
 -                                                     filename, errno,
 strerror(errno));
 +                                               error(INFO, LOGPRX"Failed
 to read '%s' from file '%s': [Error %d] %s\n",
 +                                                     name, filename,
 errno, strerror(errno));
                                                 break;
                                         }
                                         for (j = 0; j < VMW_CR64_SIZE / 8;
 j++)
 @@ -257,8 +257,8 @@ vmware_vmss_init(char *filename, FILE *ofp)
                                                 break;
                                         }
                                         if (fread(&idtr, sizeof(idtr), 1,
 fp) != 1) {
 -                                               error(INFO, LOGPRX"Failed
 to read '%s': [Error %d] %s\n",
 -                                                     filename, errno,
 strerror(errno));
 +                                               error(INFO, LOGPRX"Failed
 to read '%s' from file '%s': [Error %d] %s\n",
 +                                                     name, filename,
 errno, strerror(errno));
                                                 break;
                                         }
                                         DEBUG_PARSE_PRINT((ofp, "\n"));
 --
 2.39.3