X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fhomebank;a=blobdiff_plain;f=src%2Fhb-account.c;fp=src%2Fhb-account.c;h=b6888c9144f2838ca7f9eb1886d3f6643511fa53;hp=5917e669cfd97a8d782a7e9bb6f21351d609b68c;hb=a6c6b0df5492c2160ed97e3a376bdb2fe7c5ebc4;hpb=cd13d9691c46c2b2d6d459e9e6a76bed1c21b7a6 diff --git a/src/hb-account.c b/src/hb-account.c index 5917e66..b6888c9 100644 --- a/src/hb-account.c +++ b/src/hb-account.c @@ -1,5 +1,5 @@ /* HomeBank -- Free, easy, personal accounting for everyone. - * Copyright (C) 1995-2018 Maxime DOYEN + * Copyright (C) 1995-2019 Maxime DOYEN * * This file is part of HomeBank. * @@ -43,7 +43,6 @@ da_acc_free(Account *item) { DB( g_print(" => %d, %s\n", item->key, item->name) ); - g_free(item->imp_name); g_free(item->name); g_free(item->number); g_free(item->bankname); @@ -63,6 +62,7 @@ Account *item; DB( g_print("da_acc_malloc\n") ); item = g_malloc0(sizeof(Account)); + item->kcur = GLOBALS->kcur; item->txn_queue = g_queue_new (); return item; } @@ -85,30 +85,7 @@ da_acc_new(void) /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ -static void da_acc_max_key_ghfunc(gpointer key, Account *item, guint32 *max_key) -{ - *max_key = MAX(*max_key, item->key); -} -static gboolean da_acc_name_grfunc(gpointer key, Account *item, gchar *name) -{ - if( name && item->name ) - { - if(!strcasecmp(name, item->name)) - return TRUE; - } - return FALSE; -} - -static gboolean da_acc_imp_name_grfunc(gpointer key, Account *item, gchar *name) -{ - if( name && item->imp_name ) - { - if(!strcasecmp(name, item->imp_name)) - return TRUE; - } - return FALSE; -} /** * da_acc_length: @@ -122,6 +99,30 @@ da_acc_length(void) } +static void da_acc_max_key_ghfunc(gpointer key, Account *item, guint32 *max_key) +{ + *max_key = MAX(*max_key, item->key); +} + + +/** + * da_acc_get_max_key: + * + * Get the biggest key from the GHashTable + * + * Return value: the biggest key value + * + */ +guint32 +da_acc_get_max_key(void) +{ +guint32 max_key = 0; + + g_hash_table_foreach(GLOBALS->h_acc, (GHFunc)da_acc_max_key_ghfunc, &max_key); + return max_key; +} + + /** * da_acc_remove: * @@ -173,27 +174,16 @@ gboolean da_acc_append(Account *item) { Account *existitem; -guint32 *new_key; DB( g_print("da_acc_append\n") ); - /* ensure no duplicate */ - g_strstrip(item->name); - if(item->name != NULL) + existitem = da_acc_get_by_name( item->name ); + if( existitem == NULL ) { - existitem = da_acc_get_by_name( item->name ); - if( existitem == NULL ) - { - new_key = g_new0(guint32, 1); - *new_key = da_acc_get_max_key() + 1; - item->key = *new_key; - item->pos = da_acc_length() + 1; - - DB( g_print(" -> insert id: %d\n", *new_key) ); - - g_hash_table_insert(GLOBALS->h_acc, new_key, item); - return TRUE; - } + item->key = da_acc_get_max_key() + 1; + item->pos = da_acc_length() + 1; + da_acc_insert(item); + return TRUE; } DB( g_print(" -> %s already exist: %d\n", item->name, item->key) ); @@ -201,26 +191,17 @@ guint32 *new_key; return FALSE; } -/** - * da_acc_get_max_key: - * - * Get the biggest key from the GHashTable - * - * Return value: the biggest key value - * - */ -guint32 -da_acc_get_max_key(void) -{ -guint32 max_key = 0; - g_hash_table_foreach(GLOBALS->h_acc, (GHFunc)da_acc_max_key_ghfunc, &max_key); - return max_key; +static gboolean da_acc_name_grfunc(gpointer key, Account *item, gchar *name) +{ + if( name && item->name ) + { + if(!strcasecmp(name, item->name)) + return TRUE; + } + return FALSE; } - - - /** * da_acc_get_by_name: * @@ -230,19 +211,24 @@ guint32 max_key = 0; * */ Account * -da_acc_get_by_name(gchar *name) +da_acc_get_by_name(gchar *rawname) { +Account *retval = NULL; +gchar *stripname; + DB( g_print("da_acc_get_by_name\n") ); - return g_hash_table_find(GLOBALS->h_acc, (GHRFunc)da_acc_name_grfunc, name); -} + if( rawname ) + { + stripname = g_strdup(rawname); + g_strstrip(stripname); + if( strlen(stripname) > 0 ) + retval = g_hash_table_find(GLOBALS->h_acc, (GHRFunc)da_acc_name_grfunc, stripname); -Account * -da_acc_get_by_imp_name(gchar *name) -{ - DB( g_print("da_acc_get_by_imp_name\n") ); + g_free(stripname); + } - return g_hash_table_find(GLOBALS->h_acc, (GHRFunc)da_acc_imp_name_grfunc, name); + return retval; } @@ -429,16 +415,19 @@ account_rename(Account *item, gchar *newname) Account *existitem; gchar *stripname = account_get_stripname(newname); - existitem = da_acc_get_by_name(stripname); - if( existitem == NULL ) + if( strlen(stripname) > 0 ) { - g_free(item->name); - item->name = g_strdup(stripname); - return TRUE; - } - - g_free(stripname); + existitem = da_acc_get_by_name(stripname); + if( existitem == NULL ) + { + g_free(item->name); + item->name = g_strdup(stripname); + return TRUE; + } + g_free(stripname); + } + return FALSE; } @@ -464,7 +453,7 @@ guint32 maxkey, i; } DB( g_print(" - set for '%s'\n", acc->name) ); - + maxkey = da_acc_get_max_key () + 1; xfer_list = g_malloc0(sizeof(gboolean) * maxkey ); DB( g_print(" - alloc for %d account\n", da_acc_length() ) );