From b30c449771cc3a85310cf6f568dd32ae08e7578e Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Mon, 4 May 2015 11:17:05 +0200 Subject: [PATCH] Use of GString and GDateTime (refs# 814, 815). --- .cproject | 51 +++++++++++++++++----------------- config.h.in | 3 +- src/audit.c | 80 ++++++++++++++++++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 56 deletions(-) diff --git a/.cproject b/.cproject index c9ddf97..98a90f2 100644 --- a/.cproject +++ b/.cproject @@ -1,40 +1,39 @@ - - + + - - - + + + - - - - - - - - + @@ -51,6 +50,8 @@ + + + - diff --git a/config.h.in b/config.h.in index 147079b..f0b4c2e 100644 --- a/config.h.in +++ b/config.h.in @@ -30,8 +30,7 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ diff --git a/src/audit.c b/src/audit.c index 4e2ff90..f37497e 100644 --- a/src/audit.c +++ b/src/audit.c @@ -1,7 +1,7 @@ /* * audit.c * - * Copyright (C) 2005-2013 Andrea Zagli + * Copyright (C) 2005-2015 Andrea Zagli * * This file is part of libzak_audit. * @@ -757,15 +757,17 @@ zak_audit_action (ZakAudit *zak_audit, ...) { va_list vargs; - gchar *str; + GString *str; gchar **fields_values; gchar *field_name; gchar *field_value; + gchar **values; + gboolean ret; ret = FALSE; - str = g_strdup (""); + str = g_string_new (""); va_start (vargs, table_name); @@ -775,18 +777,23 @@ zak_audit_action (ZakAudit *zak_audit, field_value = va_arg (vargs, gchar *); if (field_value == NULL) break; - str = g_strconcat (str, (g_strcmp0 (str, "") != 0 ? "|" : ""), field_name, "|", field_value, NULL); + g_string_append (str, (g_strcmp0 (str->str, "") != 0 ? "|" : "")); + g_string_append (str, field_name); + g_string_append (str, "|"); + g_string_append (str, field_value); field_name = va_arg (vargs, gchar *); } va_end (vargs); - if (g_strcmp0 (str, "") != 0) + if (g_strcmp0 (str->str, "") != 0) { - ret = zak_audit_action_v (zak_audit, action, username, datasource_name, table_name, (const gchar **)g_strsplit (str, "|", -1)); + values = g_strsplit (str->str, "|", -1); + ret = zak_audit_action_v (zak_audit, action, username, datasource_name, table_name, (const gchar **)values); + g_strfreev (values); } - g_free (str); + g_string_free (str, TRUE); return ret; } @@ -819,6 +826,7 @@ static gchar } } } + g_strfreev (fields); return ret; } @@ -854,8 +862,7 @@ zak_audit_action_v (ZakAudit *zak_audit, gint id = 0; gint cols; gint col; - time_t t; - struct tm *tm_ora; + GDateTime *gdt; Datasource *datasource; Table *table; @@ -874,11 +881,14 @@ zak_audit_action_v (ZakAudit *zak_audit, { id = gdaex_data_model_get_value_integer_at (dm, 0, 0); } + if (dm != NULL) + { + g_object_unref (dm); + } id++; /* find action's timestamp */ - t = time (NULL); - tm_ora = localtime (&t); + gdt = g_date_time_new_now_local (); /* trovo il datasource */ datasource = get_datasource_from_name (zak_audit, datasource_name); @@ -904,10 +914,9 @@ zak_audit_action_v (ZakAudit *zak_audit, /* TODO find the way to save more than 2 digits for the seconds */ sql = g_strdup_printf ("INSERT INTO actions" " (id, type, username, date, id_tables)" - " VALUES (%d, %d, '%s', '%04d-%02d-%02d %02d:%02d:%02d', %d)", + " VALUES (%d, %d, '%s', '%s', %d)", id, action, username, - tm_ora->tm_year + 1900, tm_ora->tm_mon + 1, tm_ora->tm_mday, - tm_ora->tm_hour, tm_ora->tm_min, tm_ora->tm_sec, + g_date_time_format (gdt, "%F %T"), table->id); gdaex_execute (priv->gdaex, sql); g_free (sql); @@ -959,6 +968,7 @@ zak_audit_action_v (ZakAudit *zak_audit, insert_value (zak_audit, id, table, field_name, gdaex_data_model_get_value_stringify_at (dm, 0, col)); } + g_object_unref (dm); break; case ZAK_AUDIT_ACTION_BEFORE_UPDATE: @@ -1004,9 +1014,10 @@ zak_audit_action_v (ZakAudit *zak_audit, for (col = 0; col < cols; col++) { g_hash_table_insert (priv->fields_updated, - (gpointer)gda_data_model_get_column_title (dm, col), + (gpointer)g_strdup (gda_data_model_get_column_title (dm, col)), (gpointer)gdaex_data_model_get_value_stringify_at (dm, 0, col)); } + g_object_unref (dm); break; case ZAK_AUDIT_ACTION_AFTER_UPDATE: @@ -1069,6 +1080,7 @@ zak_audit_action_v (ZakAudit *zak_audit, g_hash_table_destroy (priv->fields_updated); priv->fields_updated = NULL; + g_object_unref (dm); break; case ZAK_AUDIT_ACTION_DELETE: @@ -1112,6 +1124,7 @@ zak_audit_action_v (ZakAudit *zak_audit, insert_value (zak_audit, id, table, field_name, gdaex_data_model_get_value_stringify_at (dm, 0, col)); } + g_object_unref (dm); break; default: @@ -1142,11 +1155,13 @@ zak_audit_action_from_gdastatement (ZakAudit *zak_audit, GdaSqlStatement *sql_stmt; - gchar *str; + GString *str; gchar *table_name; + gchar **values; + ret = FALSE; - str = g_strdup (""); + str = g_string_new (""); g_object_get (gda_statement, "structure", &sql_stmt, NULL); if (sql_stmt == NULL) @@ -1188,11 +1203,10 @@ zak_audit_action_from_gdastatement (ZakAudit *zak_audit, field_name = ((GdaSqlField *)fields->data)->field_name; field_value = (gchar *)gda_value_stringify (((GdaSqlExpr *)values->data)->value); - str = g_strconcat (str, (g_strcmp0 (str, "") != 0 ? "|" : ""), - field_name, - "|", - field_value, - NULL); + g_string_append (str, (g_strcmp0 (str->str, "") != 0 ? "|" : "")); + g_string_append (str, field_name); + g_string_append (str, "|"); + g_string_append (str, field_value); fields = g_slist_next (fields); values = g_slist_next (values); @@ -1203,28 +1217,34 @@ zak_audit_action_from_gdastatement (ZakAudit *zak_audit, case GDA_SQL_STATEMENT_UPDATE: { + gchar *strtmp; GdaSqlStatementUpdate *sql; sql = (GdaSqlStatementUpdate *)sql_stmt->contents; table_name = sql->table->table_name; - str = g_strdup (""); - parse_cond (sql->cond, &str); + strtmp = g_strdup (""); + parse_cond (sql->cond, &strtmp); + g_string_printf (str, "%s", strtmp); + g_free (strtmp); break; } case GDA_SQL_STATEMENT_DELETE: { + gchar *strtmp; GdaSqlStatementDelete *sql; sql = (GdaSqlStatementDelete *)sql_stmt->contents; table_name = sql->table->table_name; - str = g_strdup (""); - parse_cond (sql->cond, &str); + strtmp = g_strdup (""); + parse_cond (sql->cond, &strtmp); + g_string_printf (str, "%s", strtmp); + g_free (strtmp); break; } @@ -1234,9 +1254,11 @@ zak_audit_action_from_gdastatement (ZakAudit *zak_audit, return ret; } - if (g_strcmp0 (str, "") != 0) + if (g_strcmp0 (str->str, "") != 0) { - ret = zak_audit_action_v (zak_audit, action, username, datasource_name, table_name, (const gchar **)g_strsplit (str, "|", -1)); + values = g_strsplit (str->str, "|", -1); + ret = zak_audit_action_v (zak_audit, action, username, datasource_name, table_name, (const gchar **)values); + g_strfreev (values); } return ret; @@ -1632,7 +1654,7 @@ zak_audit_destroy (ZakAudit *zak_audit) gdaex_free (priv->gdaex); - g_free (zak_audit); + g_object_unref (zak_audit); } /** -- 2.49.0