diff options
Diffstat (limited to 'modules/devices')
| -rw-r--r-- | modules/devices/dmi_memory.c | 22 | 
1 files changed, 12 insertions, 10 deletions
| diff --git a/modules/devices/dmi_memory.c b/modules/devices/dmi_memory.c index 1988666b..4bb7246e 100644 --- a/modules/devices/dmi_memory.c +++ b/modules/devices/dmi_memory.c @@ -386,7 +386,6 @@ static void dmi_fill_from_spd(dmi_mem_socket *s) {  }  static dmi_mem_size size_of_online_memory_blocks() { -    gchar **online_files = NULL;      gchar *block_size_bytes_str = NULL;      dmi_mem_size block_size_bytes = 0;      dmi_mem_size ret = 0; @@ -397,19 +396,22 @@ static dmi_mem_size size_of_online_memory_blocks() {      if (!block_size_bytes)          return 0; -    online_files = get_output_lines("find /sys/devices/system/memory -name online"); -    int i, found = 0; -    for(i = 0; online_files[i]; i++) { -        gchar *online = NULL; -        if (g_file_get_contents(online_files[i], &online, NULL, NULL) ) { -            if (1 == strtol(online, NULL, 0)) { -                found++; +    const gchar *f = NULL; +    GDir *d = g_dir_open("/sys/devices/system/memory", 0, NULL); +    if (!d) return 0; + +    while((f = g_dir_read_name(d))) { +        gchar *p = g_strdup_printf("/sys/devices/system/memory/%s/online", f); +        gchar *ol = NULL; +        if (g_file_get_contents(p, &ol, NULL, NULL) ) { +            if (1 == strtol(ol, NULL, 0)) {                  ret += block_size_bytes;              }          } -        g_free(online); +        g_free(ol); +        g_free(p);      } -    g_strfreev(online_files); +    g_dir_close(d);      return ret;  } | 
