diff options
author | Burt P <pburt0@gmail.com> | 2017-08-15 17:43:30 -0500 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2017-08-27 08:21:05 -0700 |
commit | 875b0e2aab4e9a80fd75996d1cf28281a4e5e341 (patch) | |
tree | b0660d5001d427959597a370f08f95e27a55a3cf /modules/devices | |
parent | aceb905d3750a438e9c6c08c65f97eda2166c56a (diff) |
DMI: dmi_chassis_type_str() maps chassis-type to string
dmi_chassis_type_str() is moved from code in
computer.c:detect_machine_type().
It makes sense to keep it with dmi, as it maps a dmi-defined
value to a string. This way it can be used in both dmi.c
and computer.c.
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'modules/devices')
-rw-r--r-- | modules/devices/dmi.c | 61 |
1 files changed, 58 insertions, 3 deletions
diff --git a/modules/devices/dmi.c b/modules/devices/dmi.c index b89f5acc..800b5bd6 100644 --- a/modules/devices/dmi.c +++ b/modules/devices/dmi.c @@ -43,6 +43,12 @@ DMIInfo dmi_info_table[] = { { N_("Name"), "system-product-name", 0 }, { N_("Family"), "system-product-family", 0 }, { N_("Version#1"), "system-product-version", 0 }, + { N_("Chassis"), NULL, 1 }, + { N_("Vendor"), "chassis-manufacturer", 0 }, + { N_("Type"), "chassis-type", 0 }, + { N_("Version"), "chassis-version", 0 }, + { N_("Serial Number"), "chassis-serial-number", 0 }, + { N_("Asset Tag"), "chassis-asset-tag", 0 }, }; gchar *dmi_info = NULL; @@ -77,6 +83,10 @@ char *dmi_get_str(const char *id_str) { { "system-product-family", "id/product_family" }, { "system-product-version", "id/product_version" }, { "chassis-type", "id/chassis_type" }, + { "chassis-serial-number", "id/chassis_serial" }, + { "chassis-manufacturer", "id/chassis_vendor" }, + { "chassis-version", "id/chassis_version" }, + { "chassis-asset-tag", "id/chassis_asset_tag" }, { NULL, NULL } }; const gchar *dmi_root = dmi_sysfs_root(); @@ -125,6 +135,48 @@ dmi_str_done: return ret; } +char *dmi_chassis_type_str(int with_val) { + gchar *chassis = dmi_get_str("chassis-type"); + if (chassis != NULL) { + static const char *types[] = { + N_("Invalid chassis type (0)"), + N_("Unknown chassis type"), /* 1 is "Other", but not helpful in HardInfo */ + N_("Unknown chassis type"), + N_("Desktop"), + N_("Low-profile Desktop"), + N_("Pizza Box"), + N_("Mini Tower"), + N_("Tower"), + N_("Portable"), + N_("Laptop"), + N_("Notebook"), + N_("Handheld"), + N_("Docking Station"), + N_("All-in-one"), + N_("Subnotebook"), + N_("Space-saving"), + N_("Lunch Box"), + N_("Main Server Chassis"), + N_("Expansion Chassis"), + N_("Sub Chassis"), + N_("Bus Expansion Chassis"), + N_("Peripheral Chassis"), + N_("RAID Chassis"), + N_("Rack Mount Chassis"), + N_("Sealed-case PC"), + }; + int chassis_type = atoi(chassis); + g_free(chassis); + + if (chassis_type >= 0 && chassis_type < G_N_ELEMENTS(types)) + if (with_val) + return g_strdup_printf("[%d] %s", chassis_type, _(types[chassis_type])); + else + return g_strdup(_(types[chassis_type])); + } + return NULL; +} + static void add_to_moreinfo(const char *group, const char *key, char *value) { char *new_key = g_strconcat("DMI:", group, ":", key, NULL); @@ -151,7 +203,10 @@ gboolean dmi_get_info() group = info->name; dmi_info = h_strdup_cprintf("[%s]\n", dmi_info, _(info->name) ); } else if (group && info->id_str) { - value = dmi_get_str(info->id_str); + if (strcmp(info->id_str, "chassis-type") == 0) + value = dmi_chassis_type_str(1); + else + value = dmi_get_str(info->id_str); if (value != NULL) { add_to_moreinfo(group, info->name, value); @@ -162,13 +217,13 @@ gboolean dmi_get_info() dmi_info = h_strdup_cprintf("%s=%s (%s, %s)\n", dmi_info, _(info->name), - g_strstrip(value), + value, vendor, url); } else { dmi_info = h_strdup_cprintf("%s=%s\n", dmi_info, _(info->name), - g_strstrip(value)); + value); } dmi_succeeded = TRUE; } else { |