diff --git a/dmidecode.c b/dmidecode.c index 8ba8d07..c226bad 100644 --- a/dmidecode.c +++ b/dmidecode.c @@ -2083,11 +2083,10 @@ static void dmi_on_board_devices(const struct dmi_header *h, const char *prefix) for (i = 0; i < count; i++) { if (count == 1) - printf("%sOn Board Device Information\n", - prefix); + pr_handle_name("On Board Device Information"); else - printf("%sOn Board Device %d Information\n", - prefix, i + 1); + pr_handle_name("On Board Device %d Information", + i + 1); printf("%s\tType: %s\n", prefix, dmi_on_board_devices_type(p[2 * i] & 0x7F)); printf("%s\tStatus: %s\n", @@ -3397,7 +3396,7 @@ static void dmi_additional_info(const struct dmi_header *h, const char *prefix) for (i = 0; i < count; i++) { - printf("%sAdditional Information %d\n", prefix, i + 1); + pr_handle_name("Additional Information %d", i + 1); /* Check for short entries */ if (h->length < offset + 1) break; @@ -3893,7 +3892,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) switch (h->type) { case 0: /* 7.1 BIOS Information */ - printf("BIOS Information\n"); + pr_handle_name("BIOS Information"); if (h->length < 0x12) break; printf("\tVendor: %s\n", dmi_string(h, data[0x04])); @@ -3933,7 +3932,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 1: /* 7.2 System Information */ - printf("System Information\n"); + pr_handle_name("System Information"); if (h->length < 0x08) break; printf("\tManufacturer: %s\n", dmi_string(h, data[0x04])); @@ -3957,7 +3956,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 2: /* 7.3 Base Board Information */ - printf("Base Board Information\n"); + pr_handle_name("Base Board Information"); if (h->length < 0x08) break; printf("\tManufacturer: %s\n", dmi_string(h, data[0x04])); @@ -3988,7 +3987,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 3: /* 7.4 Chassis Information */ - printf("Chassis Information\n"); + pr_handle_name("Chassis Information"); if (h->length < 0x09) break; printf("\tManufacturer: %s\n", dmi_string(h, data[0x04])); @@ -4030,7 +4029,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 4: /* 7.5 Processor Information */ - printf("Processor Information\n"); + pr_handle_name("Processor Information"); if (h->length < 0x1A) break; printf("\tSocket Designation: %s\n", dmi_string(h, data[0x04])); @@ -4100,7 +4099,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 5: /* 7.6 Memory Controller Information */ - printf("Memory Controller Information\n"); + pr_handle_name("Memory Controller Information"); if (h->length < 0x0F) break; printf("\tError Detecting Method: %s\n", dmi_memory_controller_ed_method(data[0x04])); @@ -4130,7 +4129,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 6: /* 7.7 Memory Module Information */ - printf("Memory Module Information\n"); + pr_handle_name("Memory Module Information"); if (h->length < 0x0C) break; printf("\tSocket Designation: %s\n", dmi_string(h, data[0x04])); @@ -4154,7 +4153,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 7: /* 7.8 Cache Information */ - printf("Cache Information\n"); + pr_handle_name("Cache Information"); if (h->length < 0x0F) break; printf("\tSocket Designation: %s\n", dmi_string(h, data[0x04])); @@ -4197,7 +4196,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 8: /* 7.9 Port Connector Information */ - printf("Port Connector Information\n"); + pr_handle_name("Port Connector Information"); if (h->length < 0x09) break; printf("\tInternal Reference Designator: %s\n", dmi_string(h, data[0x04])); @@ -4212,7 +4211,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 9: /* 7.10 System Slots */ - printf("System Slot Information\n"); + pr_handle_name("System Slot Information"); if (h->length < 0x0C) break; printf("\tDesignation: %s\n", dmi_string(h, data[0x04])); @@ -4243,19 +4242,19 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 11: /* 7.12 OEM Strings */ - printf("OEM Strings\n"); + pr_handle_name("OEM Strings"); if (h->length < 0x05) break; dmi_oem_strings(h, "\t"); break; case 12: /* 7.13 System Configuration Options */ - printf("System Configuration Options\n"); + pr_handle_name("System Configuration Options"); if (h->length < 0x05) break; dmi_system_configuration_options(h, "\t"); break; case 13: /* 7.14 BIOS Language Information */ - printf("BIOS Language Information\n"); + pr_handle_name("BIOS Language Information"); if (h->length < 0x16) break; if (ver >= 0x0201) { @@ -4269,7 +4268,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 14: /* 7.15 Group Associations */ - printf("Group Associations\n"); + pr_handle_name("Group Associations"); if (h->length < 0x05) break; printf("\tName: %s\n", dmi_string(h, data[0x04])); @@ -4279,7 +4278,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 15: /* 7.16 System Event Log */ - printf("System Event Log\n"); + pr_handle_name("System Event Log"); if (h->length < 0x14) break; printf("\tArea Length: %u bytes\n", WORD(data + 0x04)); @@ -4311,7 +4310,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 16: /* 7.17 Physical Memory Array */ - printf("Physical Memory Array\n"); + pr_handle_name("Physical Memory Array"); if (h->length < 0x0F) break; printf("\tLocation: %s\n", dmi_memory_array_location(data[0x04])); @@ -4347,7 +4346,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 17: /* 7.18 Memory Device */ - printf("Memory Device\n"); + pr_handle_name("Memory Device"); if (h->length < 0x15) break; if (!(opt.flags & FLAG_QUIET)) { @@ -4457,7 +4456,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 18: /* 7.19 32-bit Memory Error Information */ - printf("32-bit Memory Error Information\n"); + pr_handle_name("32-bit Memory Error Information"); if (h->length < 0x17) break; printf("\tType: %s\n", dmi_memory_error_type(data[0x04])); @@ -4480,7 +4479,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 19: /* 7.20 Memory Array Mapped Address */ - printf("Memory Array Mapped Address\n"); + pr_handle_name("Memory Array Mapped Address"); if (h->length < 0x0F) break; if (h->length >= 0x1F && DWORD(data + 0x04) == 0xFFFFFFFF) { @@ -4516,7 +4515,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 20: /* 7.21 Memory Device Mapped Address */ - printf("Memory Device Mapped Address\n"); + pr_handle_name("Memory Device Mapped Address"); if (h->length < 0x13) break; if (h->length >= 0x23 && DWORD(data + 0x04) == 0xFFFFFFFF) { @@ -4559,7 +4558,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 21: /* 7.22 Built-in Pointing Device */ - printf("Built-in Pointing Device\n"); + pr_handle_name("Built-in Pointing Device"); if (h->length < 0x07) break; printf("\tType: %s\n", dmi_pointing_device_type(data[0x04])); @@ -4570,7 +4569,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 22: /* 7.23 Portable Battery */ - printf("Portable Battery\n"); + pr_handle_name("Portable Battery"); if (h->length < 0x10) break; printf("\tLocation: %s\n", dmi_string(h, data[0x04])); @@ -4618,7 +4617,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 23: /* 7.24 System Reset */ - printf("System Reset\n"); + pr_handle_name("System Reset"); if (h->length < 0x0D) break; printf("\tStatus: %s\n", data[0x04] & (1 << 0) ? "Enabled" : "Disabled"); @@ -4645,7 +4644,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 24: /* 7.25 Hardware Security */ - printf("Hardware Security\n"); + pr_handle_name("Hardware Security"); if (h->length < 0x05) break; printf("\tPower-On Password Status: %s\n", dmi_hardware_security_status(data[0x04] >> 6)); @@ -4658,7 +4657,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 25: /* 7.26 System Power Controls */ - printf("System Power Controls\n"); + pr_handle_name("System Power Controls"); if (h->length < 0x09) break; printf("\tNext Scheduled Power-on:"); dmi_power_controls_power_on(data + 0x04); @@ -4666,7 +4665,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 26: /* 7.27 Voltage Probe */ - printf("Voltage Probe\n"); + pr_handle_name("Voltage Probe"); if (h->length < 0x14) break; printf("\tDescription: %s\n", dmi_string(h, data[0x04])); @@ -4698,7 +4697,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 27: /* 7.28 Cooling Device */ - printf("Cooling Device\n"); + pr_handle_name("Cooling Device"); if (h->length < 0x0C) break; if (!(opt.flags & FLAG_QUIET) && WORD(data + 0x04) != 0xFFFF) printf("\tTemperature Probe Handle: 0x%04X\n", @@ -4721,7 +4720,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 28: /* 7.29 Temperature Probe */ - printf("Temperature Probe\n"); + pr_handle_name("Temperature Probe"); if (h->length < 0x14) break; printf("\tDescription: %s\n", dmi_string(h, data[0x04])); @@ -4753,7 +4752,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 29: /* 7.30 Electrical Current Probe */ - printf("Electrical Current Probe\n"); + pr_handle_name("Electrical Current Probe"); if (h->length < 0x14) break; printf("\tDescription: %s\n", dmi_string(h, data[0x04])); @@ -4785,7 +4784,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 30: /* 7.31 Out-of-band Remote Access */ - printf("Out-of-band Remote Access\n"); + pr_handle_name("Out-of-band Remote Access"); if (h->length < 0x06) break; printf("\tManufacturer Name: %s\n", dmi_string(h, data[0x04])); @@ -4796,7 +4795,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 31: /* 7.32 Boot Integrity Services Entry Point */ - printf("Boot Integrity Services Entry Point\n"); + pr_handle_name("Boot Integrity Services Entry Point"); if (h->length < 0x1C) break; printf("\tChecksum: %s\n", checksum(data, h->length) ? "OK" : "Invalid"); @@ -4808,14 +4807,14 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 32: /* 7.33 System Boot Information */ - printf("System Boot Information\n"); + pr_handle_name("System Boot Information"); if (h->length < 0x0B) break; printf("\tStatus: %s\n", dmi_system_boot_status(data[0x0A])); break; case 33: /* 7.34 64-bit Memory Error Information */ - printf("64-bit Memory Error Information\n"); + pr_handle_name("64-bit Memory Error Information"); if (h->length < 0x1F) break; printf("\tType: %s\n", dmi_memory_error_type(data[0x04])); @@ -4838,7 +4837,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 34: /* 7.35 Management Device */ - printf("Management Device\n"); + pr_handle_name("Management Device"); if (h->length < 0x0B) break; printf("\tDescription: %s\n", dmi_string(h, data[0x04])); @@ -4851,7 +4850,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 35: /* 7.36 Management Device Component */ - printf("Management Device Component\n"); + pr_handle_name("Management Device Component"); if (h->length < 0x0B) break; printf("\tDescription: %s\n", dmi_string(h, data[0x04])); @@ -4868,7 +4867,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 36: /* 7.37 Management Device Threshold Data */ - printf("Management Device Threshold Data\n"); + pr_handle_name("Management Device Threshold Data"); if (h->length < 0x10) break; if (WORD(data + 0x04) != 0x8000) printf("\tLower Non-critical Threshold: %d\n", @@ -4891,7 +4890,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 37: /* 7.38 Memory Channel */ - printf("Memory Channel\n"); + pr_handle_name("Memory Channel"); if (h->length < 0x07) break; printf("\tType: %s\n", dmi_memory_channel_type(data[0x04])); @@ -4908,7 +4907,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) * We use the word "Version" instead of "Revision", conforming to * the IPMI specification. */ - printf("IPMI Device Information\n"); + pr_handle_name("IPMI Device Information"); if (h->length < 0x10) break; printf("\tInterface Type: %s\n", dmi_ipmi_interface_type(data[0x04])); @@ -4946,7 +4945,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 39: /* 7.40 System Power Supply */ - printf("System Power Supply\n"); + pr_handle_name("System Power Supply"); if (h->length < 0x10) break; if (data[0x04] != 0x00) printf("\tPower Unit Group: %u\n", @@ -5006,7 +5005,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 41: /* 7.42 Onboard Device Extended Information */ - printf("Onboard Device\n"); + pr_handle_name("Onboard Device"); if (h->length < 0x0B) break; printf("\tReference Designation: %s\n", dmi_string(h, data[0x04])); printf("\tType: %s\n", @@ -5018,7 +5017,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 42: /* 7.43 Management Controller Host Interface */ - printf("Management Controller Host Interface\n"); + pr_handle_name("Management Controller Host Interface"); if (ver < 0x0302) { if (h->length < 0x05) break; @@ -5043,7 +5042,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 43: /* 7.44 TPM Device */ - printf("TPM Device\n"); + pr_handle_name("TPM Device"); if (h->length < 0x1B) break; printf("\tVendor ID:"); dmi_tpm_vendor_id(data + 0x04); @@ -5080,11 +5079,11 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; case 126: /* 7.44 Inactive */ - printf("Inactive\n"); + pr_handle_name("Inactive"); break; case 127: /* 7.45 End Of Table */ - printf("End Of Table\n"); + pr_handle_name("End Of Table"); break; default: @@ -5092,7 +5091,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) break; if (opt.flags & FLAG_QUIET) return; - printf("%s Type\n", + pr_handle_name("%s Type", h->type >= 128 ? "OEM-specific" : "Unknown"); dmi_dump(h, "\t"); } diff --git a/dmioem.c b/dmioem.c index 1a9bd82..c999c08 100644 --- a/dmioem.c +++ b/dmioem.c @@ -25,6 +25,7 @@ #include "types.h" #include "dmidecode.h" #include "dmioem.h" +#include "dmioutput.h" /* * Globals for vendor-specific decodes @@ -92,7 +93,7 @@ static int dmi_decode_acer(const struct dmi_header *h) * brands, including Fujitsu-Siemens, Medion, Lenovo, * and eMachines. */ - printf("Acer Hotkey Function\n"); + pr_handle_name("Acer Hotkey Function"); if (h->length < 0x0F) break; cap = WORD(data + 0x04); printf("\tFunction bitmap for Communication Button: 0x%04hx\n", cap); @@ -157,7 +158,7 @@ static int dmi_decode_hp(const struct dmi_header *h) /* * Vendor Specific: HPE ProLiant System/Rack Locator */ - printf("%s ProLiant System/Rack Locator\n", company); + pr_handle_name("%s ProLiant System/Rack Locator", company); if (h->length < 0x0B) break; printf("\tRack Name: %s\n", dmi_string(h, data[0x04])); printf("\tEnclosure Name: %s\n", dmi_string(h, data[0x05])); @@ -189,10 +190,9 @@ static int dmi_decode_hp(const struct dmi_header *h) * * Type 221: is deprecated in the latest docs */ - printf("%s %s\n", company, - h->type == 221 ? - "BIOS iSCSI NIC PCI and MAC Information" : - "BIOS PXE NIC PCI and MAC Information"); + pr_handle_name("%s %s", company, h->type == 221 ? + "BIOS iSCSI NIC PCI and MAC Information" : + "BIOS PXE NIC PCI and MAC Information"); nic = 1; ptr = 4; while (h->length >= ptr + 8) @@ -224,7 +224,8 @@ static int dmi_decode_hp(const struct dmi_header *h) * 0x08 | MAC | 32B | MAC addr padded w/ 0s * 0x28 | Port No| BYTE | Each NIC maps to a Port */ - printf("%s BIOS PXE NIC PCI and MAC Information\n", company); + pr_handle_name("%s BIOS PXE NIC PCI and MAC Information", + company); if (h->length < 0x0E) break; /* If the record isn't long enough, we don't have an ID * use 0xFF to use the internal counter. @@ -240,7 +241,7 @@ static int dmi_decode_hp(const struct dmi_header *h) * * Source: hpwdt kernel driver */ - printf("%s 64-bit CRU Information\n", company); + pr_handle_name("%s 64-bit CRU Information", company); if (h->length < 0x18) break; printf("\tSignature: 0x%08x", DWORD(data + 0x04)); if (is_printable(data + 0x04, 4)) @@ -265,7 +266,7 @@ static int dmi_decode_hp(const struct dmi_header *h) * * Source: hpwdt kernel driver */ - printf("%s ProLiant Information\n", company); + pr_handle_name("%s ProLiant Information", company); if (h->length < 0x08) break; printf("\tPower Features: 0x%08x\n", DWORD(data + 0x04)); if (h->length < 0x0C) break; @@ -318,7 +319,7 @@ static int dmi_decode_ibm_lenovo(const struct dmi_header *h) || strcmp(dmi_string(h, 1), "TVT-Enablement") != 0) return 0; - printf("ThinkVantage Technologies\n"); + pr_handle_name("ThinkVantage Technologies"); printf("\tVersion: %u\n", data[0x04]); printf("\tDiagnostics: %s\n", data[0x14] & 0x80 ? "Available" : "No"); @@ -357,7 +358,7 @@ static int dmi_decode_ibm_lenovo(const struct dmi_header *h) if (data[0x06] != 0x07 || data[0x07] != 0x03 || data[0x08] != 0x01) return 0; - printf("ThinkPad Device Presence Detection\n"); + pr_handle_name("ThinkPad Device Presence Detection"); printf("\tFingerprint Reader: %s\n", data[0x09] & 0x01 ? "Present" : "No"); break; @@ -390,7 +391,7 @@ static int dmi_decode_ibm_lenovo(const struct dmi_header *h) if (data[0x0A] != 0x0B || data[0x0B] != 0x07 || data[0x0C] != 0x01) return 0; - printf("ThinkPad Embedded Controller Program\n"); + pr_handle_name("ThinkPad Embedded Controller Program"); printf("\tVersion ID: %s\n", dmi_string(h, 1)); printf("\tRelease Date: %s\n", dmi_string(h, 2)); break; diff --git a/dmioutput.c b/dmioutput.c index ad3b039..ca7edab 100644 --- a/dmioutput.c +++ b/dmioutput.c @@ -49,3 +49,13 @@ void pr_handle(const struct dmi_header *h) printf("Handle 0x%04X, DMI type %d, %d bytes\n", h->handle, h->type, h->length); } + +void pr_handle_name(const char *format, ...) +{ + va_list args; + + va_start(args, format); + vprintf(format, args); + va_end(args); + printf("\n"); +} diff --git a/dmioutput.h b/dmioutput.h index 6ef60f0..0acdce7 100644 --- a/dmioutput.h +++ b/dmioutput.h @@ -24,3 +24,4 @@ void pr_comment(const char *format, ...); void pr_info(const char *format, ...); void pr_handle(const struct dmi_header *h); +void pr_handle_name(const char *format, ...);