diff options
author | Leandro Pereira <leandro@hardinfo.org> | 2019-07-09 08:41:35 -0700 |
---|---|---|
committer | Leandro Pereira <leandro@hardinfo.org> | 2019-07-11 20:21:46 -0700 |
commit | 82b5142e2b9360eaf1826ab75a7cac388c6af3bf (patch) | |
tree | f50658741fb0c1a01d38e7f8640f6835c491f675 | |
parent | 201513a63d65596739a05dbc051916a284194715 (diff) |
Do not copy InfoField while flattening
-rw-r--r-- | hardinfo/info.c | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/hardinfo/info.c b/hardinfo/info.c index c082791b..c3ace958 100644 --- a/hardinfo/info.c +++ b/hardinfo/info.c @@ -211,30 +211,28 @@ static void flatten_group(GString *output, const struct InfoGroup *group, guint if (group->fields) { for (i = 0; i < group->fields->len; i++) { - struct InfoField field; + struct InfoField *field = &g_array_index(group->fields, struct InfoField, i); gchar tag[256] = ""; - field = g_array_index(group->fields, struct InfoField, i); - - if (field.tag) - strncpy(tag, field.tag, 255); + if (field->tag) + strncpy(tag, field->tag, 255); else snprintf(tag, 255, "ITEM%d-%d", group_count, i); - if (*tag != 0 || field.highlight || field.report_details) + if (*tag != 0 || field->highlight || field->report_details) g_string_append_printf(output, "$%s%s%s$", - field.highlight ? "*" : "", - field.report_details ? "!" : "", + field->highlight ? "*" : "", + field->report_details ? "!" : "", tag); - g_string_append_printf(output, "%s=%s\n", field.name, field.value); + g_string_append_printf(output, "%s=%s\n", field->name, field->value); - if (field.free_value_on_flatten) - g_free((gchar *)field.value); - if (field.free_name_on_flatten) - g_free((gchar *)field.name); + if (field->free_value_on_flatten) + g_free((gchar *)field->value); + if (field->free_name_on_flatten) + g_free((gchar *)field->name); - g_free(field.tag); + g_free(field->tag); } } else if (group->computed) { g_string_append_printf(output, "%s\n", group->computed); @@ -249,18 +247,17 @@ static void flatten_shell_param(GString *output, const struct InfoGroup *group, return; for (i = 0; i < group->fields->len; i++) { - struct InfoField field; + struct InfoField *field = &g_array_index(group->fields, struct InfoField, i); - field = g_array_index(group->fields, struct InfoField, i); - if (field.update_interval) { + if (field->update_interval) { g_string_append_printf(output, "UpdateInterval$%s=%d\n", - field.name, field.update_interval); + field->name, field->update_interval); } - if (field.icon) { + if (field->icon) { g_string_append_printf(output, "Icon$ITEM%d-%d$=%s\n", - group_count, i, field.icon); + group_count, i, field->icon); } } } @@ -307,14 +304,14 @@ gchar *info_flatten(struct Info *info) if (info->groups) { for (i = 0; i < info->groups->len; i++) { - struct InfoGroup group = - g_array_index(info->groups, struct InfoGroup, i); + struct InfoGroup *group = + &g_array_index(info->groups, struct InfoGroup, i); - flatten_group(values, &group, i); - flatten_shell_param(shell_param, &group, i); + flatten_group(values, group, i); + flatten_shell_param(shell_param, group, i); - if (group.fields) - g_array_free(group.fields, TRUE); + if (group->fields) + g_array_free(group->fields, TRUE); } g_array_free(info->groups, TRUE); |