On Thu, Jul 18, 2024 at 16:08:06 +0200, Michal Privoznik wrote:
...
> diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c
> index cdc2a7d87b..1fd8261dc1 100644
> --- a/src/util/virsysinfo.c
> +++ b/src/util/virsysinfo.c
> @@ -910,9 +910,20 @@ virSysinfoDMIDecodeOEMString(size_t i,
>
> /* Unfortunately, dmidecode returns 0 even if OEM String index is out
> * of bounds, but it prints an error message in that case. Check stderr
> - * and return success/failure accordingly. */
> + * and return success/failure accordingly.
> + * To make matters worse, if there are two or more 'OEM String'
> + * sections then:
> + *
> + * a) we have no way of distinguishing them as dmidecode prints
> + * strings from all sections,
> + * b) if one section contains a valid string, but the other doesn't,
> + * then stdout contains the valid string and stderr contains the
> + * error "No OEM string number X*.
> + *
> + * Let's just hope there is not many systems like that.
> + */
>
> - if (err && *err != '\0')
> + if (!(*str && **str != '\0') && err && *err != '\0')
I think
if ((!*str || **str == '\0') && err && *err != '\0')
might be a bit easier for humans to parse. At least for me it is easier
:-)
Jirka