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 | |
| parent | 9dadc700d826dcb57896f3461aa0ae0102e2553e (diff) | |
Allow more dynamic InfoGroup creation
| -rw-r--r-- | hardinfo/info.c | 32 | ||||
| -rw-r--r-- | includes/info.h | 6 | 
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)));  | 
