* src/scm/iso-4217-currencies.scm: remove duplicate currency

* src/engine/sixtp-dom-parsers.c (dom_tree_to_commodity_ref): use
	gnc_commodity_destroy, not g_free.

	* src/guile/gnc.gwp: fix for new commodity insert

	* src/gnome/druid-qif-import.c: fix for new commodity insert

	* src/gnome/dialog-commodity.c: check for existing commodity.
	fix for new commodity insert.

	* src/engine/io-gncbin-r.c: fix for new commodity insert

	* src/gnome/druid-commodity.c: fix for new commodity insert

	* src/engine/gnc-commodity.c: change commodity insert semantics to
	use an existing commodity if present. Remove
	gnc_commodity_table_remove(). It wasn't used and was a mem leak.

	* src/engine/Commodity-xml-parser-v1.c
	(commodity_restore_end_handler): use gnc_commodity_destroy,
	not just g_free.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3754 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-03-07 02:37:38 +00:00
parent 802b9216fc
commit b6dc29d3ce
11 changed files with 86 additions and 47 deletions

View File

@ -1,3 +1,29 @@
2001-03-06 Dave Peticolas <dave@krondo.com>
* src/scm/iso-4217-currencies.scm: remove duplicate currency
* src/engine/sixtp-dom-parsers.c (dom_tree_to_commodity_ref): use
gnc_commodity_destroy, not g_free.
* src/guile/gnc.gwp: fix for new commodity insert
* src/gnome/druid-qif-import.c: fix for new commodity insert
* src/gnome/dialog-commodity.c: check for existing commodity.
fix for new commodity insert.
* src/engine/io-gncbin-r.c: fix for new commodity insert
* src/gnome/druid-commodity.c: fix for new commodity insert
* src/engine/gnc-commodity.c: change commodity insert semantics to
use an existing commodity if present. Remove
gnc_commodity_table_remove(). It wasn't used and was a mem leak.
* src/engine/Commodity-xml-parser-v1.c
(commodity_restore_end_handler): use gnc_commodity_destroy,
not just g_free.
2001-03-05 Dave Peticolas <dave@krondo.com> 2001-03-05 Dave Peticolas <dave@krondo.com>
* src/register/gnome/gnucash-item-edit.{ch}: improve horizontal * src/register/gnome/gnucash-item-edit.{ch}: improve horizontal

View File

@ -170,7 +170,7 @@ commodity_restore_end_handler(gpointer data_for_children,
g_free(cpi->xcode); g_free(cpi->xcode);
g_free(cpi); g_free(cpi);
if(!ok) g_free(comm); if(!ok) gnc_commodity_destroy(comm);
return(ok); return(ok);
} }

View File

@ -323,12 +323,12 @@ int xaccAccountStagedTransactionTraversal(Account *a,
/* Traverse all of the transactions in the given account group. /* Traverse all of the transactions in the given account group.
Continue processing IFF proc does not return FALSE. This function Continue processing IFF proc does not return FALSE. This function
does not descend recursively to traverse transactions in the will descend recursively to traverse transactions in the
children of the accounts in the group. children of the accounts in the group.
Proc will be called exactly once for each transaction that is Proc will be called exactly once for each transaction that is
pointed to by at least one split in an account in the account pointed to by at least one split in any account in the hierarchy
group. topped by AccountGroup g.
Note too, that if you call this function on two separate account Note too, that if you call this function on two separate account
groups and those accounts groups share transactions, proc will be groups and those accounts groups share transactions, proc will be

View File

@ -22,6 +22,9 @@
*******************************************************************/ *******************************************************************/
#define _GNU_SOURCE #define _GNU_SOURCE
#include "config.h"
#include <limits.h> #include <limits.h>
#include <string.h> #include <string.h>
#include <stdint.h> #include <stdint.h>
@ -200,6 +203,7 @@ gnc_commodity_get_fraction(const gnc_commodity * cm) {
void void
gnc_commodity_set_mnemonic(gnc_commodity * cm, const char * mnemonic) { gnc_commodity_set_mnemonic(gnc_commodity * cm, const char * mnemonic) {
if(!cm) return; if(!cm) return;
if(cm->mnemonic == mnemonic) return;
g_free(cm->mnemonic); g_free(cm->mnemonic);
cm->mnemonic = g_strdup(mnemonic); cm->mnemonic = g_strdup(mnemonic);
@ -215,6 +219,7 @@ gnc_commodity_set_mnemonic(gnc_commodity * cm, const char * mnemonic) {
void void
gnc_commodity_set_namespace(gnc_commodity * cm, const char * namespace) { gnc_commodity_set_namespace(gnc_commodity * cm, const char * namespace) {
if(!cm) return; if(!cm) return;
if(cm->namespace == namespace) return;
g_free(cm->namespace); g_free(cm->namespace);
cm->namespace = g_strdup(namespace); cm->namespace = g_strdup(namespace);
@ -230,6 +235,7 @@ gnc_commodity_set_namespace(gnc_commodity * cm, const char * namespace) {
void void
gnc_commodity_set_fullname(gnc_commodity * cm, const char * fullname) { gnc_commodity_set_fullname(gnc_commodity * cm, const char * fullname) {
if(!cm) return; if(!cm) return;
if(cm->fullname == fullname) return;
g_free(cm->fullname); g_free(cm->fullname);
cm->fullname = g_strdup(fullname); cm->fullname = g_strdup(fullname);
@ -245,6 +251,7 @@ void
gnc_commodity_set_exchange_code(gnc_commodity * cm, gnc_commodity_set_exchange_code(gnc_commodity * cm,
const char * exchange_code) { const char * exchange_code) {
if(!cm) return; if(!cm) return;
if(cm->exchange_code == exchange_code) return;
g_free(cm->exchange_code); g_free(cm->exchange_code);
cm->exchange_code = g_strdup(exchange_code); cm->exchange_code = g_strdup(exchange_code);
@ -268,12 +275,8 @@ gnc_commodity_set_fraction(gnc_commodity * cm, int fraction) {
gboolean gboolean
gnc_commodity_equiv(const gnc_commodity * a, const gnc_commodity * b) { gnc_commodity_equiv(const gnc_commodity * a, const gnc_commodity * b) {
/* fprintf(stderr, "CmpCmod %p ?= %p\n", a, b); */
if(a == b) return TRUE; if(a == b) return TRUE;
if(!a || !b) return FALSE; if(!a || !b) return FALSE;
/* fprintf(stderr, "CmpCmod %s:%s ?= %s:%s\n",
a->namespace, a->mnemonic,
b->namespace, b->mnemonic); */
if(safe_strcmp(a->namespace, b->namespace) != 0) return FALSE; if(safe_strcmp(a->namespace, b->namespace) != 0) return FALSE;
if(safe_strcmp(a->mnemonic, b->mnemonic) != 0) return FALSE; if(safe_strcmp(a->mnemonic, b->mnemonic) != 0) return FALSE;
return TRUE; return TRUE;
@ -351,10 +354,27 @@ gnc_commodity_table_find_full(const gnc_commodity_table * table,
* add a commodity to the table. * add a commodity to the table.
********************************************************************/ ********************************************************************/
void gnc_commodity *
gnc_commodity_table_insert(gnc_commodity_table * table, gnc_commodity_table_insert(gnc_commodity_table * table,
const gnc_commodity * comm) { gnc_commodity * comm) {
gnc_commodity_namespace * nsp = NULL; gnc_commodity_namespace * nsp = NULL;
gnc_commodity *c;
if (!table) return NULL;
if (!comm) return NULL;
c = gnc_commodity_table_lookup (table, comm->namespace, comm->mnemonic);
if (c) {
gnc_commodity_set_fullname (c, gnc_commodity_get_fullname (comm));
gnc_commodity_set_fraction (c, gnc_commodity_get_fraction (comm));
gnc_commodity_set_exchange_code (c,
gnc_commodity_get_exchange_code (comm));
gnc_commodity_destroy (comm);
return c;
}
nsp = g_hash_table_lookup(table->table, (gpointer)(comm->namespace)); nsp = g_hash_table_lookup(table->table, (gpointer)(comm->namespace));
@ -366,26 +386,11 @@ gnc_commodity_table_insert(gnc_commodity_table * table,
(gpointer)nsp); (gpointer)nsp);
} }
return g_hash_table_insert(nsp->table, g_hash_table_insert(nsp->table,
(gpointer)g_strdup(comm->mnemonic), (gpointer)g_strdup(comm->mnemonic),
(gpointer)comm); (gpointer)comm);
}
/******************************************************************** return comm;
* gnc_commodity_table_remove
* remove a commodity from the table (just unmaps it)
********************************************************************/
void
gnc_commodity_table_remove(gnc_commodity_table * table,
const gnc_commodity * comm) {
gnc_commodity_namespace * nsp = NULL;
nsp = g_hash_table_lookup(table->table, (gpointer)(comm->namespace));
if(nsp) {
g_hash_table_remove(nsp->table, (gpointer)comm->mnemonic);
}
} }
/******************************************************************** /********************************************************************

View File

@ -75,10 +75,8 @@ gnc_commodity * gnc_commodity_table_lookup(const gnc_commodity_table * table,
gnc_commodity * gnc_commodity_table_find_full(const gnc_commodity_table * t, gnc_commodity * gnc_commodity_table_find_full(const gnc_commodity_table * t,
const char * namespace, const char * namespace,
const char * fullname); const char * fullname);
void gnc_commodity_table_insert(gnc_commodity_table * table, gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table * table,
const gnc_commodity * comm); gnc_commodity * comm);
void gnc_commodity_table_remove(gnc_commodity_table * table,
const gnc_commodity * comm);
int gnc_commodity_table_has_namespace(const gnc_commodity_table * t, int gnc_commodity_table_has_namespace(const gnc_commodity_table * t,
const char * namespace); const char * namespace);

View File

@ -377,8 +377,7 @@ gnc_commodity_import_legacy(const char * currency_name) {
old = gnc_commodity_new(currency_name, old = gnc_commodity_new(currency_name,
GNC_COMMODITY_NS_LEGACY, currency_name, GNC_COMMODITY_NS_LEGACY, currency_name,
0, 100000); 0, 100000);
gnc_commodity_table_insert(gnc_engine_commodities(), old = gnc_commodity_table_insert(gnc_engine_commodities(), old);
old);
} }
return old; return old;
} }

View File

@ -617,21 +617,22 @@ dom_tree_to_commodity_ref_no_engine(xmlNodePtr node)
c = gnc_commodity_new(NULL, space_str, id_str, NULL, 0); c = gnc_commodity_new(NULL, space_str, id_str, NULL, 0);
} }
if(space_str) g_free(space_str); g_free(space_str);
if(id_str) g_free(id_str); g_free(id_str);
return c; return c;
} }
gnc_commodity* gnc_commodity*
dom_tree_to_commodity_ref(xmlNodePtr node) dom_tree_to_commodity_ref(xmlNodePtr node)
{ {
gnc_commodity* daref; gnc_commodity *daref;
gnc_commodity *ret; gnc_commodity *ret;
daref = dom_tree_to_commodity_ref_no_engine(node); daref = dom_tree_to_commodity_ref_no_engine(node);
ret = associate_commodity_ref_with_engine_commodity(daref); ret = associate_commodity_ref_with_engine_commodity(daref);
g_free(daref); gnc_commodity_destroy(daref);
return ret; return ret;
} }

View File

@ -457,6 +457,15 @@ gnc_ui_new_commodity_ok_cb(GtkButton * button,
if(fullname && fullname[0] && if(fullname && fullname[0] &&
namespace && namespace[0] && namespace && namespace[0] &&
mnemonic && mnemonic[0]) { mnemonic && mnemonic[0]) {
c = gnc_commodity_table_lookup (gnc_engine_commodities(),
namespace, mnemonic);
if (c) {
gnc_warning_dialog_parented (dialog,
_("That commodity already exists."));
return;
}
c = gnc_commodity_new(fullname, namespace, mnemonic, c = gnc_commodity_new(fullname, namespace, mnemonic,
gtk_entry_get_text gtk_entry_get_text
(GTK_ENTRY(w->code_entry)), (GTK_ENTRY(w->code_entry)),
@ -464,7 +473,7 @@ gnc_ui_new_commodity_ok_cb(GtkButton * button,
(GTK_SPIN_BUTTON(w->fraction_spinbutton))); (GTK_SPIN_BUTTON(w->fraction_spinbutton)));
/* remember the commodity */ /* remember the commodity */
gnc_commodity_table_insert(gnc_engine_commodities(), c); c = gnc_commodity_table_insert(gnc_engine_commodities(), c);
/* if there's a callback (generally to fill in some fields with /* if there's a callback (generally to fill in some fields with
* info about the commodity) call it */ * info about the commodity) call it */
@ -476,9 +485,10 @@ gnc_ui_new_commodity_ok_cb(GtkButton * button,
gnc_ui_new_commodity_destroy(w); gnc_ui_new_commodity_destroy(w);
} }
else { else {
gnc_warning_dialog(_("You must enter a non-empty \"Full name\", " gnc_warning_dialog_parented(dialog,
"\"Symbol/abbreviation\",\n" _("You must enter a non-empty \"Full name\", "
"and \"Type\" for the commodity.")); "\"Symbol/abbreviation\",\n"
"and \"Type\" for the commodity."));
} }
} }

View File

@ -417,7 +417,7 @@ finish_helper(gpointer key, gpointer value, gpointer data) {
/* key is the old mnemonic, value is a pointer to the gnc_commodity /* key is the old mnemonic, value is a pointer to the gnc_commodity
* structure. */ * structure. */
gnc_commodity_table_insert(gnc_engine_commodities(), comm); comm = gnc_commodity_table_insert(gnc_engine_commodities(), comm);
/* s/old commodity/new commodity/g in the pricedb */ /* s/old commodity/new commodity/g in the pricedb */
gnc_pricedb_substitute_commodity(gnc_book_get_pricedb(book), gnc_pricedb_substitute_commodity(gnc_book_get_pricedb(book),

View File

@ -1207,7 +1207,8 @@ gnc_ui_qif_import_convert(QIFImportWindow * wind) {
gnc_commodity_set_fullname(page->commodity, fullname); gnc_commodity_set_fullname(page->commodity, fullname);
gnc_commodity_set_mnemonic(page->commodity, mnemonic); gnc_commodity_set_mnemonic(page->commodity, mnemonic);
gnc_commodity_table_insert(gnc_engine_commodities(), page->commodity); page->commodity = gnc_commodity_table_insert(gnc_engine_commodities(),
page->commodity);
} }
/* call a scheme function to do the work. The return value is an /* call a scheme function to do the work. The return value is an

View File

@ -59,7 +59,6 @@
( "Fiji Dollar" "dollar" "cent" "ISO4217" "FJD" "242" 100 100 ) ( "Fiji Dollar" "dollar" "cent" "ISO4217" "FJD" "242" 100 100 )
( "Finnish Markka" "markka" "penni" "ISO4217" "FIM" "246" 100 100) ( "Finnish Markka" "markka" "penni" "ISO4217" "FIM" "246" 100 100)
( "French Franc" "franc" "centime" "ISO4217" "FRF" "250" 100 100 ) ( "French Franc" "franc" "centime" "ISO4217" "FRF" "250" 100 100 )
( "Gabon Franc" "franc" "centime" "ISO4217" "XAF" "950" 100 100 )
( "Gambian Dalasi" "dalasi" "butut" "ISO4217" "GMD" "270" 100 100 ) ( "Gambian Dalasi" "dalasi" "butut" "ISO4217" "GMD" "270" 100 100 )
( "German Mark" "deutschemark" "pfennig" "ISO4217" "DEM" "280" 100 100 ) ( "German Mark" "deutschemark" "pfennig" "ISO4217" "DEM" "280" 100 100 )
( "Ghanaian Cedi" "cedi" "psewa" "ISO4217" "GHC" "288" 100 100 ) ( "Ghanaian Cedi" "cedi" "psewa" "ISO4217" "GHC" "288" 100 100 )