summaryrefslogtreecommitdiffstats
path: root/src/hardware/dmidecode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hardware/dmidecode.c')
-rw-r--r--src/hardware/dmidecode.c36
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;