aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2018-10-22 21:46:48 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2018-11-04 15:02:12 -0800
commit7f3cfdb1247f4a578062b8587ebde1be99708a36 (patch)
tree9b63597297550bb60910536f6f38a7b274ff15a2
parentdfd6d42930d668a7dcc3587d47a89c4de652fdce (diff)
dmi_util: make ignoring string detectable
Signed-off-by: Burt P <pburt0@gmail.com>
-rw-r--r--hardinfo/dmi_util.c35
-rw-r--r--includes/dmi_util.h7
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