aboutsummaryrefslogtreecommitdiff
path: root/hardinfo/info.c
diff options
context:
space:
mode:
authorLeandro Pereira <leandro@hardinfo.org>2019-06-29 18:18:12 -0700
committerLeandro Pereira <leandro@hardinfo.org>2019-06-29 18:18:12 -0700
commitfb2a6b148021b24defa42c861110f49d601f2c27 (patch)
treea99c665261306c25dadd0c7baa1c01025989eafe /hardinfo/info.c
parent9dadc700d826dcb57896f3461aa0ae0102e2553e (diff)
Allow more dynamic InfoGroup creation
Diffstat (limited to 'hardinfo/info.c')
-rw-r--r--hardinfo/info.c32
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)