diff options
| -rw-r--r-- | hardinfo/dmi_util.c | 35 | ||||
| -rw-r--r-- | includes/dmi_util.h | 7 | 
2 files changed, 33 insertions, 9 deletions
| diff --git a/hardinfo/dmi_util.c b/hardinfo/dmi_util.c index ee32d348..82099456 100644 --- a/hardinfo/dmi_util.c +++ b/hardinfo/dmi_util.c @@ -23,10 +23,10 @@  /* frees the string and sets it NULL if it is to be ignored   * returns -1 if error, 0 if ok, 1 if ignored */ -static int ignore_placeholder_strings(char **pstr) { +static int ignore_placeholder_strings(gchar **pstr) {      if (pstr == NULL || *pstr == NULL)          return -1; -#define DMI_IGNORE(m) if (strcasecmp(m, *pstr) == 0) { free(*pstr); *pstr = NULL; return 1; } +#define DMI_IGNORE(m) if (strcasecmp(m, *pstr) == 0) { g_free(*pstr); *pstr = NULL; return 1; }      DMI_IGNORE("To be filled by O.E.M.");      DMI_IGNORE("System Product Name");      DMI_IGNORE("System Manufacturer"); @@ -55,7 +55,32 @@ static const char *dmi_sysfs_root(void) {      return NULL;  } +int dmi_str_status(const char *id_str) { +    gchar *str = dmi_get_str_abs(id_str); +    int ret = 1; + +    if (!str) +        ret = 0; + +    if ( ignore_placeholder_strings(&str) > 0 ) +        ret = -1; + +    g_free(str); +    return ret; +} +  char *dmi_get_str(const char *id_str) { +    gchar *ret = dmi_get_str_abs(id_str); +    /* return NULL on empty */ +    if (ret && *ret == 0) { +        g_free(ret); +        ret = NULL; +    } +    ignore_placeholder_strings(&ret); +    return ret; +} + +char *dmi_get_str_abs(const char *id_str) {      static struct {          char *id;          char *path; @@ -119,12 +144,6 @@ dmi_str_done:      if (ret != NULL) {          ret = strend(ret, '\n');          ret = g_strstrip(ret); -        /* return NULL on empty */ -        if (*ret == 0) { -            g_free(ret); -            ret = NULL; -        } -        ignore_placeholder_strings(&ret);      }      return ret;  } diff --git a/includes/dmi_util.h b/includes/dmi_util.h index 7ef33681..efc0ea21 100644 --- a/includes/dmi_util.h +++ b/includes/dmi_util.h @@ -21,7 +21,12 @@  #ifndef __DMI_UTIL_H__  #define __DMI_UTIL_H__ -char *dmi_get_str(const char *id_str); +/* -1 = yes, but will be ignored + *  0 = no + *  1 = yes */ +int dmi_str_status(const char *id_str); +char *dmi_get_str(const char *id_str);     /* ignore nonsense */ +char *dmi_get_str_abs(const char *id_str); /* include nonsense */  /* if chassis_type is <=0 it will be fetched from DMI.   * with_val = true, will return a string like "[3] Desktop" instead of just | 
