Decoding of OEM records can depend upon the product in addition to the manufacturer. So, save "Product Name" from type 1 record in addition to "Manufacturer" in dmi_set_vendor.
Signed-off-by: Jerry Hoemann <jerry.hoem...@hpe.com> --- dmidecode.c | 4 ++-- dmioem.c | 5 ++++- dmioem.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dmidecode.c b/dmidecode.c index 404c7e1..ac96395 100644 --- a/dmidecode.c +++ b/dmidecode.c @@ -5242,8 +5242,8 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags) } /* assign vendor for vendor-specific decodes later */ - if (h.type == 1 && h.length >= 5) - dmi_set_vendor(dmi_string(&h, data[0x04])); + if (h.type == 1 && h.length >= 6) + dmi_set_vendor(dmi_string(&h, data[0x04]), dmi_string(&h, data[0x5])); /* Fixup a common mistake */ if (h.type == 34) diff --git a/dmioem.c b/dmioem.c index beb3df0..36820e4 100644 --- a/dmioem.c +++ b/dmioem.c @@ -42,13 +42,14 @@ enum DMI_VENDORS }; static enum DMI_VENDORS dmi_vendor = VENDOR_UNKNOWN; +static const char *dmi_product = NULL; /* * Remember the system vendor for later use. We only actually store the * value if we know how to decode at least one specific entry type for * that vendor. */ -void dmi_set_vendor(const char *s) +void dmi_set_vendor(const char *s, const char *p) { int len; @@ -70,6 +71,8 @@ void dmi_set_vendor(const char *s) dmi_vendor = VENDOR_IBM; else if (strncmp(s, "LENOVO", len) == 0) dmi_vendor = VENDOR_LENOVO; + + dmi_product = p; } /* diff --git a/dmioem.h b/dmioem.h index 3916766..b79b769 100644 --- a/dmioem.h +++ b/dmioem.h @@ -21,5 +21,5 @@ struct dmi_header; -void dmi_set_vendor(const char *s); +void dmi_set_vendor(const char *s, const char *p); int dmi_decode_oem(const struct dmi_header *h); -- 2.27.0 _______________________________________________ https://lists.nongnu.org/mailman/listinfo/dmidecode-devel