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;  } | 
