diff options
author | Leandro Pereira <leandro@hardinfo.org> | 2019-06-29 18:18:12 -0700 |
---|---|---|
committer | Leandro Pereira <leandro@hardinfo.org> | 2019-06-29 18:18:12 -0700 |
commit | fb2a6b148021b24defa42c861110f49d601f2c27 (patch) | |
tree | a99c665261306c25dadd0c7baa1c01025989eafe /hardinfo/info.c | |
parent | 9dadc700d826dcb57896f3461aa0ae0102e2553e (diff) |
Allow more dynamic InfoGroup creation
Diffstat (limited to 'hardinfo/info.c')
-rw-r--r-- | hardinfo/info.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/hardinfo/info.c b/hardinfo/info.c index 57da5bab..6209bc69 100644 --- a/hardinfo/info.c +++ b/hardinfo/info.c @@ -35,7 +35,27 @@ struct Info *info_new(void) return info; } -void info_add_group(struct Info *info, const gchar *group_name, ...) +void info_group_add_fieldsv(struct InfoGroup *group, va_list ap) +{ + while (1) { + struct InfoField field = va_arg(ap, struct InfoField); + + if (!field.name) + break; + g_array_append_val(group->fields, field); + } +} + +void info_group_add_fields(struct InfoGroup *group, ...) +{ + va_list ap; + + va_start(ap, group); + info_group_add_fieldsv(group, ap); + va_end(ap); +} + +struct InfoGroup *info_add_group(struct Info *info, const gchar *group_name, ...) { struct InfoGroup group = { .name = group_name, @@ -44,16 +64,12 @@ void info_add_group(struct Info *info, const gchar *group_name, ...) va_list ap; va_start(ap, group_name); - while (1) { - struct InfoField field = va_arg(ap, struct InfoField ); - - if (!field.name) - break; - g_array_append_val(group.fields, field); - } + info_group_add_fieldsv(&group, ap); va_end(ap); g_array_append_val(info->groups, group); + + return &g_array_index(info->groups, struct InfoGroup, info->groups->len - 1); } struct InfoField info_field(const gchar *name, const gchar *value) |