diff options
Diffstat (limited to 'modules/devices/dmi.c')
-rw-r--r-- | modules/devices/dmi.c | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/modules/devices/dmi.c b/modules/devices/dmi.c index ad17c2e2..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 { @@ -66,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; @@ -88,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); @@ -119,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; } @@ -136,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); @@ -156,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); @@ -180,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" |