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