diff options
| author | Burt P <pburt0@gmail.com> | 2019-06-21 10:36:50 -0500 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2019-06-22 08:45:43 -0700 | 
| commit | c12d2d4b64548a0f5301f154d6eec1981cb66c9b (patch) | |
| tree | 70a5d18a0954ac16285e0e6e9a95327e7a37f541 /modules/devices | |
| parent | 6c3f27c5b435bccaab111d8dd32dc28473251f10 (diff) | |
DMI socket/module information moved from Processor to Memory DMI
As discussed in
https://github.com/lpereira/hardinfo/issues/345
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'modules/devices')
| -rw-r--r-- | modules/devices/dmi_memory.c | 138 | ||||
| -rw-r--r-- | modules/devices/x86/processor.c | 85 | 
2 files changed, 139 insertions, 84 deletions
| diff --git a/modules/devices/dmi_memory.c b/modules/devices/dmi_memory.c new file mode 100644 index 00000000..d6891573 --- /dev/null +++ b/modules/devices/dmi_memory.c @@ -0,0 +1,138 @@ +/* + *    HardInfo - Displays System Information + *    Copyright (C) 2003-2019 Leandro A. F. Pereira <leandro@hardinfo.org> + *    Copyright (C) 2019 Burt P. <pburt0@gmail.com> + * + *    This program is free software; you can redistribute it and/or modify + *    it under the terms of the GNU General Public License as published by + *    the Free Software Foundation, version 2. + * + *    This program is distributed in the hope that it will be useful, + *    but WITHOUT ANY WARRANTY; without even the implied warranty of + *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *    GNU General Public License for more details. + * + *    You should have received a copy of the GNU General Public License + *    along with this program; if not, write to the Free Software + *    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA + */ + +#include "hardinfo.h" +#include "devices.h" + +gboolean no_handles = FALSE; + +gchar *dmi_mem_socket_info() { +    static const char empty_mem_str[] = "No Module Installed"; +    gchar *ret = strdup(""); +    unsigned long dtm = 17, i; +    dmi_handle_list *hlm = dmidecode_handles(&dtm); +    if (!hlm) { +        no_handles = TRUE; +        ret = g_strdup_printf("[%s]\n%s=%s\n", +                _("Socket Information"), _("Result"), +                (getuid() == 0) +                ? _("(Not available)") +                : _("(Not available; Perhaps try running HardInfo as root.)") ); +    } else { +        no_handles = FALSE; +        if (hlm) { +            for(i = 0; i < hlm->count; i++) { +                unsigned long h = hlm->handles[i]; +                gchar *locator = dmidecode_match("Locator", &dtm, &h); +                gchar *size_str = dmidecode_match("Size", &dtm, &h); + +                if (strcmp(size_str, empty_mem_str) == 0) { +                    ret = h_strdup_cprintf("[%s (%lu) %s]\n" +                                    "%s=0x%x\n" +                                    "%s=%s\n", +                                    ret, +                                    _("Memory Socket"), i, locator, +                                    _("DMI Handle"), h, +                                    _("Size"), _("(Empty)") ); +                } else { +                    gchar *form_factor = dmidecode_match("Form Factor", &dtm, &h); +                    gchar *type = dmidecode_match("Type", &dtm, &h); +                    gchar *type_detail = dmidecode_match("Type Detail", &dtm, &h); +                    gchar *speed_str = dmidecode_match("Speed", &dtm, &h); +                    gchar *configured_clock_str = dmidecode_match("Configured Clock Speed", &dtm, &h); +                    gchar *voltage_min_str = dmidecode_match("Minimum Voltage", &dtm, &h); +                    gchar *voltage_max_str = dmidecode_match("Maximum Voltage", &dtm, &h); +                    gchar *voltage_conf_str = dmidecode_match("Configured Voltage", &dtm, &h); +                    gchar *mfgr = dmidecode_match("Manufacturer", &dtm, &h); +                    gchar *partno = dmidecode_match("Part Number", &dtm, &h); + +                    gchar *vendor_str = NULL; +                    if (mfgr) { +                        const gchar *v_url = vendor_get_url(mfgr); +                        if (v_url) +                            vendor_str = g_strdup_printf(" (%s, %s)", +                                vendor_get_name(mfgr), v_url ); +                        else +                            vendor_str = g_strdup(""); +                    } + +#define UNKIFNULL2(f) ((f) ? f : _("(Unknown)")) + +                    ret = h_strdup_cprintf("[%s (%lu) %s]\n" +                                    "%s=0x%x\n" +                                    "%s=%s\n" +                                    "%s=%s%s\n" +                                    "%s=%s\n" +                                    "%s=%s / %s\n" +                                    "%s=%s\n" +                                    "%s=%s\n" +                                    "%s=%s\n" +                                    "%s=%s\n" +                                    "%s=%s\n" +                                    "%s=%s\n", +                                    ret, +                                    _("Memory Socket"), i, locator, +                                    _("DMI Handle"), h, +                                    _("Form Factor"), UNKIFNULL2(form_factor), +                                    _("Manufacturer"), UNKIFNULL2(mfgr), vendor_str, +                                    _("Part Number"), UNKIFNULL2(partno), +                                    _("Type"), UNKIFNULL2(type), UNKIFNULL2(type_detail), +                                    _("Size"), UNKIFNULL2(size_str), +                                    _("Speed"), UNKIFNULL2(speed_str), +                                    _("Configured Clock Frequency"), UNKIFNULL2(configured_clock_str), +                                    _("Minimum Voltage"), UNKIFNULL2(voltage_min_str), +                                    _("Maximum Voltage"), UNKIFNULL2(voltage_max_str), +                                    _("Configured Voltage"), UNKIFNULL2(voltage_conf_str) +                                    ); +                    g_free(type); +                    g_free(form_factor); +                    g_free(speed_str); +                    g_free(configured_clock_str); +                    g_free(voltage_min_str); +                    g_free(voltage_max_str); +                    g_free(voltage_conf_str); +                    g_free(mfgr); +                    g_free(partno); +                    g_free(vendor_str); +                } +                g_free(size_str); +                g_free(locator); +            } +            dmi_handle_list_free(hlm); +        } +    } + +    return ret; +} + +gboolean dmi_mem_show_hinote(const char **msg) { +    if (no_handles) { +        if (getuid() == 0) { +            *msg = g_strdup( +                _("To view DMI memory information the <b><i>dmidecode</i></b> utility must be\n" +                  "available.")); +        } else { +            *msg = g_strdup( +                _("To view DMI memory information the <b><i>dmidecode</i></b> utility must be\n" +                  "available, and HardInfo must be run with superuser privileges.")); +        } +        return TRUE; +    } +    return FALSE; +} diff --git a/modules/devices/x86/processor.c b/modules/devices/x86/processor.c index 180545ce..4e36b817 100644 --- a/modules/devices/x86/processor.c +++ b/modules/devices/x86/processor.c @@ -679,11 +679,9 @@ gchar *processor_describe(GSList * processors) {  }  gchar *dmi_socket_info() { -    static const char empty_mem_str[] = "No Module Installed";      gchar *ret = strdup(""); -    unsigned long dt = 4, dtm = 17, i; +    unsigned long dt = 4, i;      dmi_handle_list *hl = dmidecode_handles(&dt); -    dmi_handle_list *hlm = dmidecode_handles(&dtm);      if (!hl) {          ret = g_strdup_printf("[%s]\n%s=%s\n",                  _("Socket Information"), _("Result"), @@ -721,87 +719,6 @@ gchar *dmi_socket_info() {          }          dmi_handle_list_free(hl); - -        if (hlm) { -            for(i = 0; i < hlm->count; i++) { -                unsigned long h = hlm->handles[i]; -                gchar *locator = dmidecode_match("Locator", &dtm, &h); -                gchar *size_str = dmidecode_match("Size", &dtm, &h); - -                if (strcmp(size_str, empty_mem_str) == 0) { -                    ret = h_strdup_cprintf("[%s (%lu) %s]\n" -                                    "%s=0x%x\n" -                                    "%s=%s\n", -                                    ret, -                                    _("Memory Socket"), i, locator, -                                    _("DMI Handle"), h, -                                    _("Size"), _("(Empty)") ); -                } else { -                    gchar *form_factor = dmidecode_match("Form Factor", &dtm, &h); -                    gchar *type = dmidecode_match("Type", &dtm, &h); -                    gchar *type_detail = dmidecode_match("Type Detail", &dtm, &h); -                    gchar *speed_str = dmidecode_match("Speed", &dtm, &h); -                    gchar *configured_clock_str = dmidecode_match("Configured Clock Speed", &dtm, &h); -                    gchar *voltage_min_str = dmidecode_match("Minimum Voltage", &dtm, &h); -                    gchar *voltage_max_str = dmidecode_match("Maximum Voltage", &dtm, &h); -                    gchar *voltage_conf_str = dmidecode_match("Configured Voltage", &dtm, &h); -                    gchar *mfgr = dmidecode_match("Manufacturer", &dtm, &h); -                    gchar *partno = dmidecode_match("Part Number", &dtm, &h); - -                    gchar *vendor_str = NULL; -                    if (mfgr) { -                        const gchar *v_url = vendor_get_url(mfgr); -                        if (v_url) -                            vendor_str = g_strdup_printf(" (%s, %s)", -                                vendor_get_name(mfgr), v_url ); -                        else -                            vendor_str = g_strdup(""); -                    } - -#define UNKIFNULL2(f) ((f) ? f : _("(Unknown)")) - -                    ret = h_strdup_cprintf("[%s (%lu) %s]\n" -                                    "%s=0x%x\n" -                                    "%s=%s\n" -                                    "%s=%s%s\n" -                                    "%s=%s\n" -                                    "%s=%s / %s\n" -                                    "%s=%s\n" -                                    "%s=%s\n" -                                    "%s=%s\n" -                                    "%s=%s\n" -                                    "%s=%s\n" -                                    "%s=%s\n", -                                    ret, -                                    _("Memory Socket"), i, locator, -                                    _("DMI Handle"), h, -                                    _("Form Factor"), UNKIFNULL2(form_factor), -                                    _("Manufacturer"), UNKIFNULL2(mfgr), vendor_str, -                                    _("Part Number"), UNKIFNULL2(partno), -                                    _("Type"), UNKIFNULL2(type), UNKIFNULL2(type_detail), -                                    _("Size"), UNKIFNULL2(size_str), -                                    _("Speed"), UNKIFNULL2(speed_str), -                                    _("Configured Clock Frequency"), UNKIFNULL2(configured_clock_str), -                                    _("Minimum Voltage"), UNKIFNULL2(voltage_min_str), -                                    _("Maximum Voltage"), UNKIFNULL2(voltage_max_str), -                                    _("Configured Voltage"), UNKIFNULL2(voltage_conf_str) -                                    ); -                    g_free(type); -                    g_free(form_factor); -                    g_free(speed_str); -                    g_free(configured_clock_str); -                    g_free(voltage_min_str); -                    g_free(voltage_max_str); -                    g_free(voltage_conf_str); -                    g_free(mfgr); -                    g_free(partno); -                    g_free(vendor_str); -                } -                g_free(size_str); -                g_free(locator); -            } -            dmi_handle_list_free(hlm); -        }      }      return ret; | 
