summaryrefslogtreecommitdiff
path: root/modules/devices/dmi.c
diff options
context:
space:
mode:
authorSimon Quigley <tsimonq2@ubuntu.com>2017-08-16 04:32:39 -0500
committerSimon Quigley <tsimonq2@ubuntu.com>2017-08-16 04:32:39 -0500
commit9a9db98089717990cd5e0eef529f6bb0819ebe46 (patch)
treea9afaabce984d5fe552fa8bf1a9405db9bdd2699 /modules/devices/dmi.c
parent69a2124e9a081518297951256eb5c8d72d93361f (diff)
New upstream version 0.5.1+git20170815
Diffstat (limited to 'modules/devices/dmi.c')
-rw-r--r--modules/devices/dmi.c55
1 files changed, 31 insertions, 24 deletions
diff --git a/modules/devices/dmi.c b/modules/devices/dmi.c
index 61cea65d..5f87df13 100644
--- a/modules/devices/dmi.c
+++ b/modules/devices/dmi.c
@@ -22,7 +22,7 @@
#include <sys/types.h>
#include "devices.h"
-
+
typedef struct _DMIInfo DMIInfo;
struct _DMIInfo {
@@ -35,10 +35,14 @@ DMIInfo dmi_info_table[] = {
{ "$BIOS", NULL, NULL },
{ "Date", "/sys/class/dmi/id/bios_date", "bios-release-date" },
{ "Vendor", "/sys/class/dmi/id/bios_vendor", "bios-vendor" },
- { "Version", "/sys/class/dmi/id/bios_version", "bios-version" },
+ { "Version#0", "/sys/class/dmi/id/bios_version", "bios-version" },
{ "$Board", NULL, NULL },
{ "Name", "/sys/class/dmi/id/board_name", "baseboard-product-name" },
{ "Vendor", "/sys/class/dmi/id/board_vendor", "baseboard-manufacturer" },
+ { "$Product", NULL, NULL },
+ { "Name", "/sys/class/dmi/id/product_name", "system-product-name" },
+ { "Family", "/sys/class/dmi/id/product_family", "system-product-family" },
+ { "Version#1", "/sys/class/dmi/id/product_version", "system-product-version" },
};
gchar *dmi_info = NULL;
@@ -62,16 +66,16 @@ gboolean dmi_get_info_dmidecode()
g_free(dmi_info);
dmi_info = NULL;
}
-
+
for (i = 0; i < G_N_ELEMENTS(dmi_info_table); i++) {
info = &dmi_info_table[i];
-
+
if (*(info->name) == '$') {
group = info->name + 1;
dmi_info = h_strdup_cprintf("[%s]\n", dmi_info, group);
} else {
gchar *temp;
-
+
if (!info->param)
continue;
@@ -84,7 +88,7 @@ gboolean dmi_get_info_dmidecode()
dmi_failed = TRUE;
break;
}
-
+
add_to_moreinfo(group, info->name, buffer);
const gchar *url = vendor_get_url(buffer);
@@ -115,14 +119,14 @@ gboolean dmi_get_info_dmidecode()
dmi_failed = TRUE;
break;
}
- }
+ }
}
-
+
if (dmi_failed) {
g_free(dmi_info);
dmi_info = NULL;
}
-
+
return !dmi_failed;
}
@@ -132,17 +136,17 @@ gboolean dmi_get_info_sys()
gchar buffer[256];
const gchar *group = NULL;
DMIInfo *info;
- gboolean dmi_failed = FALSE;
+ gboolean dmi_succeeded = FALSE;
gint i;
-
+
if (dmi_info) {
g_free(dmi_info);
dmi_info = NULL;
}
-
+
for (i = 0; i < G_N_ELEMENTS(dmi_info_table); i++) {
info = &dmi_info_table[i];
-
+
if (*(info->name) == '$') {
group = info->name + 1;
dmi_info = h_strdup_cprintf("[%s]\n", dmi_info, group);
@@ -152,7 +156,7 @@ gboolean dmi_get_info_sys()
fclose(dmi_file);
add_to_moreinfo(group, info->name, buffer);
-
+
const gchar *url = vendor_get_url(buffer);
if (url) {
const gchar *vendor = vendor_get_name(buffer);
@@ -176,31 +180,34 @@ gboolean dmi_get_info_sys()
info->name,
g_strstrip(buffer));
}
+ dmi_succeeded = TRUE;
} else {
- dmi_failed = TRUE;
- break;
+ dmi_info = h_strdup_cprintf("%s=%s\n",
+ dmi_info,
+ info->name,
+ _("(Not available; Perhaps try running HardInfo as root.)") );
}
- }
+ }
}
-
- if (dmi_failed) {
+
+ if (!dmi_succeeded) {
g_free(dmi_info);
dmi_info = NULL;
}
-
- return !dmi_failed;
+
+ return dmi_succeeded;
}
void __scan_dmi()
{
gboolean dmi_ok;
-
+
dmi_ok = dmi_get_info_sys();
-
+
if (!dmi_ok) {
dmi_ok = dmi_get_info_dmidecode();
}
-
+
if (!dmi_ok) {
dmi_info = g_strdup("[No DMI information]\n"
"There was an error retrieving the information.=\n"