From 7f644b581d6c29fb1ebc565bd336edb27340cbfc Mon Sep 17 00:00:00 2001
From: Andrea Zagli <azagli@libero.it>
Date: Sat, 28 Dec 2019 11:34:48 +0100
Subject: [PATCH] Boxed field struct.

---
 src/audit.c       | 61 +++++++++++++++++++++++++----------------------
 src/libzakaudit.h | 10 ++++++++
 2 files changed, 42 insertions(+), 29 deletions(-)

diff --git a/src/audit.c b/src/audit.c
index da610b0..b5e0139 100644
--- a/src/audit.c
+++ b/src/audit.c
@@ -63,13 +63,6 @@ typedef struct
 	gchar *field_value;
 } ChangesColumn;
 
-typedef struct
-{
-	gint id;
-	gchar *name;
-	gboolean is_key;
-} Field;
-
 typedef struct
 {
 	gchar **values;
@@ -86,7 +79,7 @@ static gboolean load_fields (ZakAudit *zak_audit,
 static gboolean load_tables (ZakAudit *zak_audit,
                              ZakAuditDatasource *datasource);
 static gboolean load_datasources (ZakAudit *zak_audit, va_list ap);
-static Field *get_field_from_name (ZakAudit *zak_audit,
+static ZakAuditField *get_field_from_name (ZakAudit *zak_audit,
                                    ZakAuditTable *table,
                                    const char *field);
 static ZakAuditTable *get_table_from_name (ZakAudit *zak_audit,
@@ -223,16 +216,6 @@ zak_audit_init (ZakAudit *zak_audit)
 	priv->gtkbuilder = gtk_builder_new ();
 }
 
-static void
-free_field (gpointer data)
-{
-	Field *f;
-
-	f = (Field *)data;
-
-	g_free (f->name);
-}
-
 static gboolean
 load_fields (ZakAudit *zak_audit,
              ZakAuditDatasource *datasource,
@@ -244,7 +227,7 @@ load_fields (ZakAudit *zak_audit,
 	gchar *sql;
 	gint rows, row;
 
-	Field *field;
+	ZakAuditField *field;
 
 	ZakAuditPrivate *priv = ZAK_AUDIT_GET_PRIVATE (zak_audit);
 
@@ -281,7 +264,7 @@ load_fields (ZakAudit *zak_audit,
 
 	for (row = 0; row < rows; row++)
 		{
-			field = g_new0 (Field, 1);
+			field = g_new0 (ZakAuditField, 1);
 
 			field->id = gdaex_data_model_get_field_value_integer_at (dm, row, "id");
 			field->name = gdaex_data_model_get_field_value_stringify_at (dm, row, "name");
@@ -472,12 +455,12 @@ load_datasources (ZakAudit *zak_audit, va_list ap)
 	return TRUE;
 }
 
-static Field
+static ZakAuditField
 *get_field_from_name (ZakAudit *zak_audit,
                       ZakAuditTable *table,
                       const char *field)
 {
-	Field *ret_field;
+	ZakAuditField *ret_field;
 	GList *c = g_list_first (table->fields);
 
 	gchar *real_field;
@@ -487,9 +470,9 @@ static Field
 	ret_field = NULL;
 	while (c != NULL)
 		{
-			if (g_strcmp0 (((Field *)c->data)->name, real_field) == 0)
+			if (g_strcmp0 (((ZakAuditField *)c->data)->name, real_field) == 0)
 				{
-					ret_field = (Field *)c->data;
+					ret_field = (ZakAuditField *)c->data;
 					break;
 				}
 
@@ -569,7 +552,7 @@ insert_value (ZakAudit *zak_audit,
 
 	ZakAuditPrivate *priv = ZAK_AUDIT_GET_PRIVATE (zak_audit);
 
-	Field *field = get_field_from_name (zak_audit, table, field_name);
+	ZakAuditField *field = get_field_from_name (zak_audit, table, field_name);
 	if (field == NULL)
 		{
 			g_warning (_("Unable to find the field «%s» on loaded fields."),
@@ -1728,7 +1711,7 @@ GtkWidget
 
 	ZakAuditDatasource *datasource;
 	ZakAuditTable *table;
-	Field *field;
+	ZakAuditField *field;
 
 	guint l;
 	guint strpart;
@@ -2122,7 +2105,7 @@ const gchar
 {
 	ZakAuditDatasource *datasource;
 	ZakAuditTable *table;
-	Field *field;
+	ZakAuditField *field;
 
 	guint l;
 	guint strpart;
@@ -2337,6 +2320,26 @@ GOptionGroup
 	return ret;
 }
 
+ZakAuditField
+*zak_audit_field_copy (ZakAuditField *field)
+{
+	ZakAuditField *f;
+
+	f = g_slice_new (ZakAuditField);
+	f->id = field->id;
+	f->name = g_strdup (field->name);
+	f->is_key = field->is_key;
+
+	return f;
+}
+
+void
+zak_audit_field_free (ZakAuditField *field)
+{
+	g_free (field->name);
+	g_slice_free (ZakAuditField, field);
+}
+
 ZakAuditTable
 *zak_audit_table_copy (ZakAuditTable *table)
 {
@@ -2357,9 +2360,9 @@ void
 zak_audit_table_free (ZakAuditTable *table)
 {
 	g_free (table->name);
-	g_list_free_full (table->fields, free_field);
+	g_list_free_full (table->fields, g_free);
 	g_free (table->fields_sql);
-	g_list_free_full (table->keys, free_field);
+	g_list_free_full (table->keys, g_free);
 	g_free (table->keys_sql);
 	g_slice_free (ZakAuditTable, table);
 }
diff --git a/src/libzakaudit.h b/src/libzakaudit.h
index 3b549a3..f39e527 100644
--- a/src/libzakaudit.h
+++ b/src/libzakaudit.h
@@ -115,6 +115,16 @@ void zak_audit_destroy (ZakAudit *zak_audit);
 
 GOptionGroup *zak_audit_get_option_group (ZakAudit *zak_audit);
 
+typedef struct
+{
+	gint id;
+	gchar *name;
+	gboolean is_key;
+} ZakAuditField;
+
+ZakAuditField *zak_audit_field_copy (ZakAuditField *field);
+void zak_audit_field_free (ZakAuditField *field);
+
 typedef struct
 {
 	gint id;
-- 
2.49.0