diff options
author | Burt P <pburt0@gmail.com> | 2019-06-28 23:04:11 -0500 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2019-06-29 17:58:52 -0700 |
commit | 0b3d25f596f7f58e9210fe50d90f580af2339b46 (patch) | |
tree | b8506681818c397d0371f5afed5a6449a8bd3c9a | |
parent | 6bf10e09a097edf4c2a6de6966b159f8375c1acc (diff) |
dmi_util.c: add simple cache for dmidecode reads
Signed-off-by: Burt P <pburt0@gmail.com>
-rw-r--r-- | hardinfo/dmi_util.c | 21 |
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; } |