aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hardinfo/info.c32
-rw-r--r--includes/info.h6
2 files changed, 29 insertions, 9 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)
diff --git a/includes/info.h b/includes/info.h
index a665f0a3..91eb0eaf 100644
--- a/includes/info.h
+++ b/includes/info.h
@@ -18,6 +18,7 @@
#pragma once
+#include <stdarg.h>
#include <glib.h>
struct Info {
@@ -54,9 +55,12 @@ struct InfoField {
struct Info *info_new(void);
-void info_add_group(struct Info *info, const gchar *group_name, ...);
+struct InfoGroup *info_add_group(struct Info *info, const gchar *group_name, ...);
void info_add_computed_group(struct Info *info, const gchar *name, const gchar *value);
+void info_group_add_fields(struct InfoGroup *group, ...);
+void info_group_add_fieldsv(struct InfoGroup *group, va_list ap);
+
struct InfoField info_field(const gchar *name, const gchar *value);
struct InfoField info_field_printf(const gchar *name, const gchar *format, ...)
__attribute__((format(printf, 2, 3)));