From 6acad2b9e4b366a2b4e3f9e821411a8ae532d2ea Mon Sep 17 00:00:00 2001 From: Andrea Zagli <azagli@libero.it> Date: Tue, 16 Dec 2014 17:46:16 +0100 Subject: [PATCH] Adjustments. --- src/libconfi.c | 123 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 41 deletions(-) diff --git a/src/libconfi.c b/src/libconfi.c index a2e5dc0..2becfaf 100644 --- a/src/libconfi.c +++ b/src/libconfi.c @@ -366,22 +366,31 @@ ConfiKey ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); gint id_parent; - gchar *parent_ = g_strstrip (g_strdup (parent)), - *key_ = g_strstrip (g_strdup (key)); - if (strcmp (parent_, "") == 0) + gchar *parent_; + gchar *key_; + + if (parent == NULL) { id_parent = 0; } else { - dmParent = path_get_data_model (confi, path_normalize (confi, parent_)); - if (dmParent == NULL) + parent_ = g_strstrip (g_strdup (parent)); + if (strcmp (parent_, "") == 0) { - id_parent = -1; + id_parent = 0; } else { - id_parent = gdaex_data_model_get_field_value_integer_at (dmParent, 0, "id"); + dmParent = path_get_data_model (confi, path_normalize (confi, parent_)); + if (dmParent == NULL) + { + id_parent = -1; + } + else + { + id_parent = gdaex_data_model_get_field_value_integer_at (dmParent, 0, "id"); + } } } @@ -404,6 +413,8 @@ ConfiKey } id++; + key_ = g_strstrip (g_strdup (key)); + sql = g_strdup_printf ("INSERT INTO %cvalues%c " "(id_configs, id, id_parent, %ckey%c, value) " "VALUES (%d, %d, %d, '%s', '%s')", @@ -420,7 +431,7 @@ ConfiKey return NULL; } - ck = (ConfiKey *)g_malloc0 (sizeof (ConfiKey)); + ck = g_new0 (ConfiKey, 1); ck->id_config = priv->id_config; ck->id = id; ck->id_parent = id_parent; @@ -435,7 +446,10 @@ ConfiKey { ck->path = g_strdup (parent_); } + + g_free (key_); } + g_free (parent_); return ck; } @@ -452,18 +466,19 @@ ConfiKey ConfiKey *confi_add_key_with_value (Confi *confi, const gchar *parent, const gchar *key, const gchar *value) { + gchar *path; + ConfiKey *ck = confi_add_key (confi, parent, key); if (ck != NULL) { - gchar *path = ""; if (ck->id_parent != 0) { path = g_strconcat (ck->path, "/", key, NULL); } else { - path = ck->key; + path = g_strdup (ck->key); } if (!confi_path_set_value (confi, path, value)) @@ -474,6 +489,7 @@ ConfiKey { ck->value = g_strdup (value); } + g_free (path); } return ck; @@ -489,11 +505,12 @@ gboolean confi_key_set_key (Confi *confi, ConfiKey *ck) { - gboolean ret = FALSE; + gboolean ret; + gchar *sql; ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); - gchar *sql = g_strdup_printf ("UPDATE %cvalues%c SET " + sql = g_strdup_printf ("UPDATE %cvalues%c SET " "%ckey%c = '%s', value = '%s', description = '%s' " "WHERE id_configs = %d " "AND id = %d", @@ -506,6 +523,7 @@ confi_key_set_key (Confi *confi, ck->id); ret = (gdaex_execute (priv->gdaex, sql) >= 0); + g_free (sql); return ret; } @@ -619,14 +637,17 @@ gchar gboolean confi_path_set_value (Confi *confi, const gchar *path, const gchar *value) { - gboolean ret = FALSE; + gchar *sql; + gboolean ret; + GdaDataModel *dm = path_get_data_model (confi, path_normalize (confi, path)); ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); + ret = FALSE; if (dm != NULL && gda_data_model_get_n_rows (dm) > 0) { - gchar *sql = g_strdup_printf ("UPDATE %cvalues%c SET value = '%s' " + sql = g_strdup_printf ("UPDATE %cvalues%c SET value = '%s' " "WHERE id_configs = %d " "AND id = %d ", priv->chrquot, priv->chrquot, @@ -634,6 +655,7 @@ confi_path_set_value (Confi *confi, const gchar *path, const gchar *value) priv->id_config, gdaex_data_model_get_field_value_integer_at (dm, 0, "id")); ret = (gdaex_execute (priv->gdaex, sql) >= 0); + g_free (sql); } else { @@ -657,7 +679,8 @@ confi_path_set_value (Confi *confi, const gchar *path, const gchar *value) gboolean confi_path_move (Confi *confi, const gchar *path, const gchar *parent) { - gboolean ret = TRUE; + gboolean ret; + gchar *sql; ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); @@ -667,7 +690,8 @@ confi_path_move (Confi *confi, const gchar *path, const gchar *parent) GdaDataModel *dmParent = path_get_data_model (confi, path_normalize (confi, parent)); if (dmParent == NULL) return FALSE; - gchar *sql = g_strdup_printf ("UPDATE %cvalues%c " + ret = TRUE; + sql = g_strdup_printf ("UPDATE %cvalues%c " "SET id_parent = %d " "WHERE id_configs = %d " "AND id = %d", @@ -677,6 +701,7 @@ confi_path_move (Confi *confi, const gchar *path, const gchar *parent) gdaex_data_model_get_field_value_integer_at (dmPath, 0, "id")); ret = (gdaex_execute (priv->gdaex, sql) >= 0); + g_free (sql); return ret; } @@ -705,6 +730,10 @@ ConfiKey GdaDataModel *dm = path_get_data_model (confi, path_); if (dm == NULL || gda_data_model_get_n_rows (dm) <= 0) { + if (dm != NULL) + { + g_object_unref (dm); + } return NULL; } @@ -734,22 +763,27 @@ ConfiKey gboolean confi_remove (Confi *confi) { - gboolean ret = TRUE; + gboolean ret; + gchar *sql; ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); - if (gdaex_execute (priv->gdaex, - g_strdup_printf ("DELETE FROM %cvalues%c WHERE id_configs = %d", - priv->chrquot, priv->chrquot, - priv->id_config)) == -1) + ret = TRUE; + sql = g_strdup_printf ("DELETE FROM %cvalues%c WHERE id_configs = %d", + priv->chrquot, + priv->chrquot, + priv->id_config); + if (gdaex_execute (priv->gdaex, sql) == -1) { + g_free (sql); ret = FALSE; } else { - if (gdaex_execute (priv->gdaex, - g_strdup_printf ("DELETE FROM configs WHERE id = %d", - priv->id_config)) == -1) + g_free (sql); + sql = g_strdup_printf ("DELETE FROM configs WHERE id = %d", + priv->id_config); + if (gdaex_execute (priv->gdaex, sql) == -1) { ret = FALSE; } @@ -784,8 +818,10 @@ confi_destroy (Confi *confi) static gchar *path_normalize (Confi *confi, const gchar *path) { - gchar *ret; - gchar *lead; + GString *ret; + gchar *strret; + + guint lead; ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); @@ -794,34 +830,37 @@ static gchar return NULL; } - ret = g_strstrip (g_strdup (path)); - if (strcmp (ret, "") == 0) + ret = g_string_new (path); + g_strstrip (ret->str); + if (g_strcmp0 (ret->str, "") == 0) { return NULL; } - else if (ret[strlen (ret) - 1] == '/') + else if (ret->str[strlen (ret->str) - 1] == '/') { return NULL; } /* removing leading '/' */ - for (;;) + lead = 0; + for (lead = 0; lead < ret->len; lead++) { - if (ret[0] == '/') - { - lead = g_strdup (ret + 1); - ret = g_strchug (lead); - g_free (lead); - } - else + if (ret->str[lead] != '/') { break; } } - ret = g_strconcat (priv->root, ret, NULL); + if (lead < ret->len) + { + g_string_erase (ret, 0, lead++); + } + g_string_prepend (ret, priv->root); - return ret; + strret = g_strdup (ret->str); + g_string_free (ret, TRUE); + + return strret; } static GdaDataModel @@ -859,6 +898,7 @@ static GdaDataModel priv->chrquot, priv->chrquot, gdaex_strescape (token, NULL)); dm = gdaex_query (priv->gdaex, sql); + g_free (sql); if (dm == NULL || gda_data_model_get_n_rows (dm) != 1) { /* TO DO */ @@ -871,7 +911,6 @@ static GdaDataModel break; } id_parent = gdaex_data_model_get_field_value_integer_at (dm, 0, "id"); - g_free (sql); } i++; @@ -1018,10 +1057,11 @@ static gboolean confi_delete_id_from_db_values (Confi *confi, gint id) { gboolean ret; + gchar *sql; ConfiPrivate *priv = CONFI_GET_PRIVATE (confi); - gchar *sql = g_strdup_printf ("DELETE FROM %cvalues%c " + sql = g_strdup_printf ("DELETE FROM %cvalues%c " "WHERE id_configs = %d " "AND id = %d", priv->chrquot, priv->chrquot, @@ -1037,6 +1077,7 @@ confi_delete_id_from_db_values (Confi *confi, gint id) ret = FALSE; } g_free (sql); + return ret; } -- 2.49.0