aboutsummaryrefslogtreecommitdiff
path: root/hardinfo/dmi_util.c
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2019-06-28 23:04:11 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2019-06-29 17:58:52 -0700
commit0b3d25f596f7f58e9210fe50d90f580af2339b46 (patch)
treeb8506681818c397d0371f5afed5a6449a8bd3c9a /hardinfo/dmi_util.c
parent6bf10e09a097edf4c2a6de6966b159f8375c1acc (diff)
dmi_util.c: add simple cache for dmidecode reads
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'hardinfo/dmi_util.c')
-rw-r--r--hardinfo/dmi_util.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/hardinfo/dmi_util.c b/hardinfo/dmi_util.c
index 6479de6b..55e21c4d 100644
--- a/hardinfo/dmi_util.c
+++ b/hardinfo/dmi_util.c
@@ -234,6 +234,11 @@ char *dmi_chassis_type_str(int chassis_type, gboolean with_val) {
return NULL;
}
+/* TODO: something better maybe */
+char *dd_cache[128] = {};
+void dmidecode_cache_free()
+{ int i; for(i = 0; i < 128; i++) g_free(dd_cache[i]); }
+
char *dmidecode_read(const unsigned long *dmi_type) {
gchar *ret = NULL;
gchar full_path[PATH_MAX];
@@ -242,10 +247,15 @@ char *dmidecode_read(const unsigned long *dmi_type) {
int i = 0;
- if (dmi_type)
+ if (dmi_type) {
+ if (dd_cache[*dmi_type])
+ return g_strdup(dd_cache[*dmi_type]);
snprintf(full_path, PATH_MAX, "dmidecode -t %lu", *dmi_type);
- else
+ } else {
+ if (dd_cache[127])
+ return g_strdup(dd_cache[127]);
snprintf(full_path, PATH_MAX, "dmidecode");
+ }
spawned = g_spawn_command_line_sync(full_path,
&out, &err, &i, NULL);
@@ -258,6 +268,13 @@ char *dmidecode_read(const unsigned long *dmi_type) {
g_free(err);
}
+ if (ret) {
+ if (*dmi_type)
+ dd_cache[*dmi_type] = g_strdup(ret);
+ else
+ dd_cache[127] = g_strdup(ret);
+ }
+
return ret;
}