diff --git a/src/backend/file/gnc-commodity-xml-v2.c b/src/backend/file/gnc-commodity-xml-v2.c index ae0fbcd649..e63d5fb4ad 100644 --- a/src/backend/file/gnc-commodity-xml-v2.c +++ b/src/backend/file/gnc-commodity-xml-v2.c @@ -249,7 +249,7 @@ gnc_commodity_end_handler(gpointer data_for_children, gpointer parent_data, gpointer global_data, gpointer *result, const gchar *tag) { - gnc_commodity *com; + gnc_commodity *com, *old_com; xmlNodePtr achild; xmlNodePtr tree = (xmlNodePtr)data_for_children; gxpf_data *gdata = (gxpf_data*)global_data; @@ -269,9 +269,10 @@ gnc_commodity_end_handler(gpointer data_for_children, g_return_val_if_fail(tree, FALSE); - com = gnc_commodity_find_currency(book, tree); - if (!com) - com = gnc_commodity_new(book, NULL, NULL, NULL, NULL, 0); + com = gnc_commodity_new(book, NULL, NULL, NULL, NULL, 0); + old_com = gnc_commodity_find_currency(book, tree); + if (old_com) + gnc_commodity_copy(com, old_com); for(achild = tree->xmlChildrenNode; achild; achild = achild->next) { diff --git a/src/engine/gnc-commodity.c b/src/engine/gnc-commodity.c index f72b303a29..d31e08da01 100644 --- a/src/engine/gnc-commodity.c +++ b/src/engine/gnc-commodity.c @@ -1770,6 +1770,20 @@ gnc_commodity_table_insert(gnc_commodity_table * table, LEAVE("already in table"); return c; } + + /* Backward compatability support for currencies that have + * recently changed. */ + if (priv->namespace->iso4217) { + guint i; + for (i = 0; i < GNC_NEW_ISO_CODES; i++) { + if (!priv->mnemonic + || !strcmp(priv->mnemonic, gnc_new_iso_codes[i].old_code)) { + gnc_commodity_set_mnemonic(comm, gnc_new_iso_codes[i].new_code); + break; + } + } + } + gnc_commodity_copy (c, comm); gnc_commodity_destroy (comm); LEAVE("found at %p", c);