From 0b3d25f596f7f58e9210fe50d90f580af2339b46 Mon Sep 17 00:00:00 2001 From: Burt P Date: Fri, 28 Jun 2019 23:04:11 -0500 Subject: dmi_util.c: add simple cache for dmidecode reads Signed-off-by: Burt P --- hardinfo/dmi_util.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'hardinfo') 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; } -- cgit v1.2.3