diff options
Diffstat (limited to 'src/hardware/dmidecode.c')
-rw-r--r-- | src/hardware/dmidecode.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/hardware/dmidecode.c b/src/hardware/dmidecode.c index a171707..a4c1050 100644 --- a/src/hardware/dmidecode.c +++ b/src/hardware/dmidecode.c @@ -1177,6 +1177,10 @@ void init_dmi_chassis_struct(DmiChassis *chassis) chassis->version = NULL; chassis->has_lock = 0; chassis->power_cords = 0; + chassis->asset_tag = NULL; + chassis->model = NULL; + chassis->product_name = NULL; + chassis->uuid = NULL; } /* @@ -1218,6 +1222,30 @@ short check_dmi_chassis_attributes(DmiChassis *chassis) goto done; } } + if (!chassis->asset_tag) { + if (!(chassis->asset_tag = strdup(""))) { + ret = -7; + goto done; + } + } + if (!chassis->model) { + if (!(chassis->model = strdup(""))) { + ret = -8; + goto done; + } + } + if (!chassis->product_name) { + if (!(chassis->product_name = strdup(""))) { + ret = -9; + goto done; + } + } + if (!chassis->uuid) { + if (!(chassis->uuid = strdup(""))) { + ret = -10; + goto done; + } + } ret = 0; @@ -1259,6 +1287,13 @@ short dmi_get_chassis(DmiChassis *chassis) buf = NULL; continue; } + /* Asset Tag */ + buf = copy_string_part_after_delim(buffer[i], "Asset Tag: "); + if (buf) { + chassis->asset_tag = buf; + buf = NULL; + continue; + } /* Type */ buf = copy_string_part_after_delim(buffer[i], "Type: "); if (buf) { @@ -1309,6 +1344,36 @@ short dmi_get_chassis(DmiChassis *chassis) } } + free_2d_buffer(&buffer, &buffer_size); + + /* get additional dmidecode output for chassis */ + if (run_command("dmidecode -t 1", &buffer, &buffer_size) == 0 + && buffer_size > 4) { + for (i = 0; i < buffer_size; i++) { + /* Model */ + buf = copy_string_part_after_delim(buffer[i], "Version: "); + if (buf) { + chassis->model = buf; + buf = NULL; + continue; + } + /* Product Name */ + buf = copy_string_part_after_delim(buffer[i], "Product Name: "); + if (buf) { + chassis->product_name = buf; + buf = NULL; + continue; + } + /* UUID */ + buf = copy_string_part_after_delim(buffer[i], "UUID: "); + if (buf) { + chassis->uuid = buf; + buf = NULL; + continue; + } + } + } + /* fill in default attributes if needed */ if (check_dmi_chassis_attributes(chassis) != 0) { ret = -4; @@ -1339,6 +1404,31 @@ void dmi_free_chassis(DmiChassis *chassis) chassis->sku_number = NULL; free(chassis->version); chassis->version = NULL; + free(chassis->asset_tag); + chassis->asset_tag = NULL; + free(chassis->model); + chassis->model = NULL; + free(chassis->product_name); + chassis->product_name = NULL; + free(chassis->uuid); + chassis->uuid = NULL; +} + +char *dmi_get_chassis_tag(DmiChassis *chassis) +{ + char *ret; + + if (strlen(chassis->asset_tag) > 0 + && strcmp(chassis->asset_tag, "Not Specified") != 0) { + ret = chassis->asset_tag; + } else if (strlen(chassis->serial_number) > 0 + && strcmp(chassis->serial_number, "Not Specified") != 0) { + ret = chassis->serial_number; + } else { + ret = "0"; + } + + return ret; } |