diff options
Diffstat (limited to 'src/hardware/dmidecode.c')
-rw-r--r-- | src/hardware/dmidecode.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/src/hardware/dmidecode.c b/src/hardware/dmidecode.c index 7f5c6d4..a457db0 100644 --- a/src/hardware/dmidecode.c +++ b/src/hardware/dmidecode.c @@ -918,25 +918,19 @@ short dmi_get_memory(DmiMemory *memory) } continue; } - if (strstr(buffer[i], "Locator:")) { - if (strstr(buffer[i], "Bank Locator:")) { - /* Memory Module Bank Label */ - buf = copy_string_part_after_delim(buffer[i], "Bank Locator: "); - if (buf) { - memory->modules[curr_mem].bank_label = buf; - buf = NULL; - continue; - } - } else { - /* Slot */ - buf = copy_string_part_after_delim(buffer[i], "Locator: "); - if (buf) { - sscanf(buf, "%*s %d", &memory->modules[curr_mem].slot); - free(buf); - buf = NULL; - continue; - } + /* Memory Module Bank Label and Slot ID */ + buf = copy_string_part_after_delim(buffer[i], "Locator: "); + if (buf) { + if (memory->modules[curr_mem].slot != -1) { + continue; + } + if (strncasecmp(buf, "bank ", 5) != 0) { + continue; } + sscanf(buf, "%*s %d", &memory->modules[curr_mem].slot); + memory->modules[curr_mem].bank_label = buf; + buf = NULL; + continue; } /* Form Factor */ buf = copy_string_part_after_delim(buffer[i], "Form Factor: "); @@ -969,7 +963,11 @@ short dmi_get_memory(DmiMemory *memory) /* Speed in MHz */ buf = copy_string_part_after_delim(buffer[i], "Speed: "); if (buf) { - sscanf(buf, "%u", &memory->modules[curr_mem].speed_clock); + if (strstr(buffer[i], "Configured Clock Speed: ")) { + sscanf(buf, "%u", &memory->modules[curr_mem].speed_clock); + } else if (memory->modules[curr_mem].speed_clock == 0) { + sscanf(buf, "%u", &memory->modules[curr_mem].speed_clock); + } free(buf); buf = NULL; continue; |