diff --git a/gnucash/gnome-utils/dialog-reset-warnings.c b/gnucash/gnome-utils/dialog-reset-warnings.c index 02dd18c318..c6b0602cf1 100644 --- a/gnucash/gnome-utils/dialog-reset-warnings.c +++ b/gnucash/gnome-utils/dialog-reset-warnings.c @@ -366,8 +366,6 @@ gnc_reset_warnings_dialog (GtkWindow *parent) GtkWidget *dialog; GtkBuilder *builder; - rw_dialog = g_new0 (RWDialog, 1); - ENTER(""); if (gnc_forall_gui_components(DIALOG_RESET_WARNINGS_CM_CLASS, show_handler, NULL)) @@ -386,6 +384,7 @@ gnc_reset_warnings_dialog (GtkWindow *parent) gtk_window_set_transient_for(GTK_WINDOW (dialog), parent); + rw_dialog = g_new0 (RWDialog, 1); rw_dialog->dialog = dialog; PINFO("rw_dialog %p, dialog %p", rw_dialog, dialog); diff --git a/gnucash/gnome-utils/dialog-totd.c b/gnucash/gnome-utils/dialog-totd.c index d7158b043a..ac791084bf 100644 --- a/gnucash/gnome-utils/dialog-totd.c +++ b/gnucash/gnome-utils/dialog-totd.c @@ -315,8 +315,6 @@ gnc_totd_dialog (GtkWindow *parent, gboolean startup) GtkTextView *textview; gboolean show_tips; - totd_dialog = g_new0 (TotdDialog, 1); - show_tips = gnc_prefs_get_bool(GNC_PREFS_GROUP, GNC_PREF_SHOW_TIPS); if (startup && !show_tips) return; @@ -350,6 +348,7 @@ gnc_totd_dialog (GtkWindow *parent, gboolean startup) // Set the style context for this dialog so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(dialog), "GncTotdDialog"); + totd_dialog = g_new0 (TotdDialog, 1); totd_dialog->dialog = dialog; ENTER("totd_dialog %p, dialog %p", totd_dialog, dialog); diff --git a/gnucash/gnome-utils/gnc-tree-view-split-reg.c b/gnucash/gnome-utils/gnc-tree-view-split-reg.c index d6fc079513..121a43bc2e 100644 --- a/gnucash/gnome-utils/gnc-tree-view-split-reg.c +++ b/gnucash/gnome-utils/gnc-tree-view-split-reg.c @@ -4996,7 +4996,7 @@ gtv_sr_num_cb (GtkEntry *entry, snprintf (buff, sizeof(buff), "%ld", number); if (g_strcmp0 (buff, "") == 0) - leave_string = ""; + leave_string = g_strdup (""); else leave_string = g_strdup (buff); } diff --git a/gnucash/gnome/assistant-loan.cpp b/gnucash/gnome/assistant-loan.cpp index 00af266155..3509b18cc0 100644 --- a/gnucash/gnome/assistant-loan.cpp +++ b/gnucash/gnome/assistant-loan.cpp @@ -2017,7 +2017,7 @@ void loan_rev_hash_to_list( gpointer key, gpointer val, gpointer user_data ) { GList **l = (GList**)user_data; - RevRepaymentRow *rrr = g_new0( RevRepaymentRow, 1 ); + RevRepaymentRow *rrr; if ( !key || !val ) { DEBUG( "%.8x, %.8x", @@ -2025,6 +2025,7 @@ loan_rev_hash_to_list( gpointer key, gpointer val, gpointer user_data ) GPOINTER_TO_UINT(val)); return; } + rrr = g_new0( RevRepaymentRow, 1 ); rrr->date = *(GDate*)key; rrr->numCells = (gnc_numeric*)val; *l = g_list_append( *l, (gpointer)rrr ); diff --git a/gnucash/gnome/dialog-invoice.c b/gnucash/gnome/dialog-invoice.c index adb7e26577..49094daad6 100644 --- a/gnucash/gnome/dialog-invoice.c +++ b/gnucash/gnome/dialog-invoice.c @@ -2187,6 +2187,7 @@ gnc_invoice_recreate_page (GncMainWindow *window, goto give_up; } g_free(tmp_string); + tmp_string = NULL; /* Get Owner Type */ owner_type = g_key_file_get_string(key_file, group_name, diff --git a/gnucash/gnome/dialog-print-check.c b/gnucash/gnome/dialog-print-check.c index d6f8ad0deb..5fcbe43949 100644 --- a/gnucash/gnome/dialog-print-check.c +++ b/gnucash/gnome/dialog-print-check.c @@ -1529,6 +1529,7 @@ read_one_check_directory(PrintCheckDialog *pcd, GtkListStore *store, found = TRUE; } } + free_check_format (format); g_dir_close(dir); /* If any files were added to the list, add a separator between diff --git a/gnucash/gnome/dialog-sx-from-trans.c b/gnucash/gnome/dialog-sx-from-trans.c index c8625bea89..19f265fee3 100644 --- a/gnucash/gnome/dialog-sx-from-trans.c +++ b/gnucash/gnome/dialog-sx-from-trans.c @@ -789,7 +789,7 @@ gnc_sx_create_from_trans( GtkWindow *parent, Transaction *trans ) "from a Transaction currently " "being edited. Please Enter the " "Transaction before Scheduling." ) ); - sxftd_close( sxfti, TRUE ); + sxftd_destroy (NULL, sxfti); return; } else diff --git a/gnucash/gnome/gnc-split-reg.c b/gnucash/gnome/gnc-split-reg.c index 589564d740..56b1257583 100644 --- a/gnucash/gnome/gnc-split-reg.c +++ b/gnucash/gnome/gnc-split-reg.c @@ -2285,7 +2285,6 @@ static void gnc_split_reg_determine_read_only( GNCSplitReg *gsr ) { - dialog_args *args = g_malloc(sizeof(dialog_args)); SplitRegister *reg; if (qof_book_is_readonly(gnc_get_current_book())) @@ -2297,7 +2296,8 @@ gnc_split_reg_determine_read_only( GNCSplitReg *gsr ) if ( !gsr->read_only ) { - + dialog_args *args; + char *string = NULL; switch (gnc_split_reg_get_placeholder(gsr)) { case PLACEHOLDER_NONE: @@ -2305,14 +2305,14 @@ gnc_split_reg_determine_read_only( GNCSplitReg *gsr ) return; case PLACEHOLDER_THIS: - args->string = _("This account may not be edited. If you want " + string = _("This account may not be edited. If you want " "to edit transactions in this register, please " "open the account options and turn off the " "placeholder checkbox."); break; default: - args->string = _("One of the sub-accounts selected may not be " + string = _("One of the sub-accounts selected may not be " "edited. If you want to edit transactions in " "this register, please open the sub-account " "options and turn off the placeholder checkbox. " @@ -2322,6 +2322,8 @@ gnc_split_reg_determine_read_only( GNCSplitReg *gsr ) } gsr->read_only = TRUE; /* Put up a warning dialog */ + args = g_malloc(sizeof(dialog_args)); + args->string = string; args->gsr = gsr; g_timeout_add (250, gtk_callback_bug_workaround, args); /* 0.25 seconds */ } diff --git a/gnucash/gnome/gnc-split-reg2.c b/gnucash/gnome/gnc-split-reg2.c index 1c45682b76..cb8a868c5e 100644 --- a/gnucash/gnome/gnc-split-reg2.c +++ b/gnucash/gnome/gnc-split-reg2.c @@ -911,7 +911,7 @@ gsr2_determine_account_pr_dialog (gpointer argp) static void gnc_split_reg2_determine_account_pr (GNCSplitReg2 *gsr) { - dialog_args *args = g_malloc (sizeof (dialog_args)); + dialog_args *args; GncTreeModelSplitReg *model; model = gnc_ledger_display2_get_split_model_register (gsr->ledger); @@ -920,6 +920,8 @@ gnc_split_reg2_determine_account_pr (GNCSplitReg2 *gsr) return; /* Put up a warning dialog */ + args = g_malloc (sizeof (dialog_args)); + args->string = _(""); /* FIXME: No string for dialog. */ args->gsr = gsr; g_timeout_add (250, gsr2_determine_account_pr_dialog, args); /* 0.25 seconds */ } @@ -958,7 +960,6 @@ static void gnc_split_reg2_determine_read_only (GNCSplitReg2 *gsr) //this works { - dialog_args *args = g_malloc (sizeof (dialog_args)); if (qof_book_is_readonly (gnc_get_current_book())) { @@ -969,6 +970,7 @@ gnc_split_reg2_determine_read_only (GNCSplitReg2 *gsr) //this works if (!gsr->read_only) { + dialog_args *args = g_malloc (sizeof (dialog_args)); switch (gnc_split_reg2_get_placeholder (gsr)) { diff --git a/gnucash/gnucash-bin.c b/gnucash/gnucash-bin.c index d4e1eb6ebe..bff1f40f47 100644 --- a/gnucash/gnucash-bin.c +++ b/gnucash/gnucash-bin.c @@ -173,29 +173,32 @@ static void mac_set_currency_locale(NSLocale *locale, NSString *locale_str) { /* If the currency doesn't match the base locale, we need to find a locale that does match, because setlocale won't know what to do with just a currency identifier. */ + NSLocale *cur_locale = [[NSLocale alloc] initWithLocaleIdentifier: locale_str]; if (![[locale objectForKey: NSLocaleCurrencyCode] isEqualToString: - [[[NSLocale alloc] initWithLocaleIdentifier: locale_str] objectForKey: NSLocaleCurrencyCode]]) { - NSArray *all_locales = [NSLocale availableLocaleIdentifiers]; - NSEnumerator *locale_iter = [all_locales objectEnumerator]; - NSString *this_locale; - NSString *currency = [locale objectForKey: NSLocaleCurrencyCode]; - NSString *money_locale = nil; - while ((this_locale = (NSString*)[locale_iter nextObject])) - { - NSLocale *templocale = [[NSLocale alloc] - initWithLocaleIdentifier: this_locale]; - if ([[templocale objectForKey: NSLocaleCurrencyCode] - isEqualToString: currency]) - { - money_locale = this_locale; - [templocale release]; - break; - } - [templocale release]; - } - if (money_locale) - setlocale(LC_MONETARY, [money_locale UTF8String]); + [cur_locale objectForKey: NSLocaleCurrencyCode]]) + { + NSArray *all_locales = [NSLocale availableLocaleIdentifiers]; + NSEnumerator *locale_iter = [all_locales objectEnumerator]; + NSString *this_locale; + NSString *currency = [locale objectForKey: NSLocaleCurrencyCode]; + NSString *money_locale = nil; + while ((this_locale = (NSString*)[locale_iter nextObject])) + { + NSLocale *templocale = [[NSLocale alloc] + initWithLocaleIdentifier: this_locale]; + if ([[templocale objectForKey: NSLocaleCurrencyCode] + isEqualToString: currency]) + { + money_locale = this_locale; + [templocale release]; + break; + } + [templocale release]; + } + if (money_locale) + setlocale(LC_MONETARY, [money_locale UTF8String]); } + [cur_locale release]; } /* The locale that we got from AppKit isn't a supported POSIX one, so we need to * find something close. First see if we can find another locale for the @@ -219,9 +222,7 @@ mac_find_close_country(NSString *locale_str, NSString *country_str, new_locale = this_locale; break; } - if (new_locale) - locale_str = new_locale; - else + if (!new_locale) while ((this_locale = (NSString*)[locale_iter nextObject])) if ([[[NSLocale componentsFromLocaleIdentifier: this_locale] objectForKey: NSLocaleLanguageCode] diff --git a/gnucash/import-export/bi-import/dialog-bi-import.c b/gnucash/import-export/bi-import/dialog-bi-import.c index 07e6cab460..5b46e84d8b 100644 --- a/gnucash/import-export/bi-import/dialog-bi-import.c +++ b/gnucash/import-export/bi-import/dialog-bi-import.c @@ -879,15 +879,15 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book, static char * un_escape(char *str) { gchar quote = '"'; - gchar *newStr = NULL; + gchar *newStr = NULL, *tmpstr = str; int n = 0; newStr = g_malloc(strlen(str)+1); // This must be freed in the calling code. - while(*str != '\0') + while(*tmpstr != '\0') { - if(*str == quote) + if(*tmpstr == quote) { - str++; - if(*str == quote) + tmpstr++; + if(*tmpstr == quote) { newStr[n] = quote; } @@ -896,9 +896,10 @@ static char * un_escape(char *str) { newStr[n] = *str; } - str++; + tmpstr++; n++; - } + } + g_free (str); newStr[n] = '\0'; //ending the character array return newStr; } diff --git a/gnucash/import-export/customer-import/dialog-customer-import.c b/gnucash/import-export/customer-import/dialog-customer-import.c index a095417189..758ce8c674 100644 --- a/gnucash/import-export/customer-import/dialog-customer-import.c +++ b/gnucash/import-export/customer-import/dialog-customer-import.c @@ -336,7 +336,6 @@ gnc_customer_import_create_customers (GtkListStore *store, QofBook *book, guint // Set the customer id if one has not been chosen if (strlen (id) == 0) { - g_free (id); if (g_ascii_strcasecmp (type, "CUSTOMER") == 0) id = gncCustomerNextID (book); else if (g_ascii_strcasecmp (type, "VENDOR") == 0)id = gncVendorNextID (book); //printf("ASSIGNED ID = %s\n",id); @@ -413,6 +412,7 @@ gnc_customer_import_create_customers (GtkListStore *store, QofBook *book, guint //printf("TYPE %s created with ID = %s.\n", type, id); // DEBUG } + g_free (id); g_free (company); g_free (name); g_free (addr1); diff --git a/libgnucash/app-utils/gnc-exp-parser.c b/libgnucash/app-utils/gnc-exp-parser.c index 24f0b9ec82..2e303f90c5 100644 --- a/libgnucash/app-utils/gnc-exp-parser.c +++ b/libgnucash/app-utils/gnc-exp-parser.c @@ -230,6 +230,7 @@ make_predefined_vars_from_external_helper( gpointer key, gpointer value, gpointe pnum->value = *(gnc_numeric*)value; make_predefined_vars_helper( key, pnum, data ); + g_free(pnum); /* make_predefined_vars_helper allocs its own copy. */ } static var_store_ptr diff --git a/libgnucash/backend/xml/gnc-xml-backend.cpp b/libgnucash/backend/xml/gnc-xml-backend.cpp index 2c0ca2197d..61a73ba323 100644 --- a/libgnucash/backend/xml/gnc-xml-backend.cpp +++ b/libgnucash/backend/xml/gnc-xml-backend.cpp @@ -378,6 +378,7 @@ GncXmlBackend::write_to_file (bool make_backup) if (!mktemp (tmp_name)) { + g_free (tmp_name); set_error(ERR_BACKEND_MISC); set_message("Failed to make temp file"); LEAVE (""); @@ -388,6 +389,7 @@ GncXmlBackend::write_to_file (bool make_backup) { if (!backup_file ()) { + g_free (tmp_name); LEAVE (""); return FALSE; } @@ -513,6 +515,7 @@ GncXmlBackend::write_to_file (bool make_backup) LEAVE (""); return FALSE; } + g_free (tmp_name); LEAVE (""); return TRUE; } diff --git a/libgnucash/backend/xml/io-gncxml-v1.cpp b/libgnucash/backend/xml/io-gncxml-v1.cpp index ef3ad33a12..af0177b58f 100644 --- a/libgnucash/backend/xml/io-gncxml-v1.cpp +++ b/libgnucash/backend/xml/io-gncxml-v1.cpp @@ -765,49 +765,42 @@ kvp_frame_slot_end_handler (gpointer data_for_children, { KvpFrame* f = (KvpFrame*) parent_data; GSList* lp; - guint64 key_node_count; + gboolean first = TRUE; gchar* key = NULL; - sixtp_child_result* value_cr = NULL; KvpValue* value = NULL; gboolean delete_value = FALSE; - + sixtp_child_result *cr1 = NULL, *cr2 = NULL, *cr = NULL; g_return_val_if_fail (f, FALSE); if (g_slist_length (data_from_children) != 2) return (FALSE); - - /* check to see that we got exactly one node */ - lp = data_from_children; - key_node_count = 0; - for (lp = data_from_children; lp; lp = lp->next) + cr1 = (sixtp_child_result*)data_from_children->data; + cr2 = (sixtp_child_result*)data_from_children->next->data; + + if (is_child_result_from_node_named(cr1, "k")) { - sixtp_child_result* cr = (sixtp_child_result*) lp->data; - - if (is_child_result_from_node_named (cr, "k")) - { - key = (char*) cr->data; - key_node_count++; - } - else - { - if (is_child_result_from_node_named (cr, "frame")) - { - KvpFrame* frame = static_cast (cr->data); - value = new KvpValue {frame}; - delete_value = TRUE; - } - else - { - value = static_cast (cr->data); - delete_value = FALSE; - } - - value_cr = cr; - } + key = (char*)cr1->data; + cr = cr2; } - - if (key_node_count != 1) return (FALSE); - - value_cr->should_cleanup = TRUE; + else if (is_child_result_from_node_named(cr2, "k")) + { + key = (char*)cr2->data; + cr = cr1; + } + else + return FALSE; + + if (is_child_result_from_node_named (cr, "frame")) + { + KvpFrame* frame = static_cast (cr->data); + value = new KvpValue {frame}; + delete_value = TRUE; + } + else + { + value = static_cast (cr->data); + delete_value = FALSE; + } + f->set ({key}, value); if (delete_value) delete value; diff --git a/libgnucash/backend/xml/io-gncxml-v2.cpp b/libgnucash/backend/xml/io-gncxml-v2.cpp index 55e43959ad..3c04094076 100644 --- a/libgnucash/backend/xml/io-gncxml-v2.cpp +++ b/libgnucash/backend/xml/io-gncxml-v2.cpp @@ -1868,6 +1868,7 @@ gnc_xml2_find_ambiguous (const gchar* filename, GList* encodings, if (iconv_item->iconv == (GIConv) - 1) { PWARN ("Unable to open IConv conversion descriptor for '%s'", enc); + g_free (iconv_item); goto cleanup_find_ambs; } else @@ -2176,7 +2177,8 @@ gnc_xml2_parse_with_subst (GncXmlBackend* xml_be, QofBook* book, GHashTable* sub success = qof_session_load_from_xml_file_v2_full ( xml_be, book, (sixtp_push_handler) parse_with_subst_push_handler, push_data, GNC_BOOK_XML2_FILE); - + g_free (push_data); + if (success) qof_instance_set_dirty (QOF_INSTANCE (book)); diff --git a/libgnucash/backend/xml/sixtp.cpp b/libgnucash/backend/xml/sixtp.cpp index 2064d7f3f6..95f499514f 100644 --- a/libgnucash/backend/xml/sixtp.cpp +++ b/libgnucash/backend/xml/sixtp.cpp @@ -267,20 +267,22 @@ sixtp_destroy_child (gpointer key, gpointer value, gpointer user_data) gpointer lookup_value; g_debug ("Killing sixtp child under key <%s>", key ? (char*) key : "(null)"); - g_free (key); if (!corpses) { g_critical ("no corpses in sixtp_destroy_child <%s>", key ? (char*) key : "(null)"); + g_free (key); return; } if (!child) { g_critical ("no child in sixtp_destroy_child <%s>", key ? (char*) key : ""); + g_free (key); return; } + g_free (key); if (!g_hash_table_lookup_extended (corpses, (gconstpointer) child, &lookup_key, &lookup_value)) diff --git a/libgnucash/core-utils/gnc-environment.c b/libgnucash/core-utils/gnc-environment.c index 8d0e102553..fc44733266 100644 --- a/libgnucash/core-utils/gnc-environment.c +++ b/libgnucash/core-utils/gnc-environment.c @@ -146,9 +146,10 @@ gnc_environment_parse_one (const gchar *env_path) /* Remove the "x" from our result */ if (g_strcmp0 (tmp_val, "x")) + { new_val = g_strdup (tmp_val + sizeof (G_SEARCHPATH_SEPARATOR_S)); - g_free (tmp_val); - + g_free (tmp_val); + } if (!g_setenv (env_vars[i], new_val, TRUE)) g_warning ("Couldn't properly override environment variable \"%s\". " "This may lead to unexpected results", env_vars[i]); diff --git a/libgnucash/engine/gnc-commodity.c b/libgnucash/engine/gnc-commodity.c index f7b6c0ceff..2a028cedfd 100644 --- a/libgnucash/engine/gnc-commodity.c +++ b/libgnucash/engine/gnc-commodity.c @@ -2457,8 +2457,8 @@ gnc_commodity_table_destroy(gnc_commodity_table * t) t->ns_list = NULL; g_hash_table_destroy(t->ns_table); t->ns_table = NULL; - g_free(t); LEAVE ("table=%p", t); + g_free(t); } /* =========================================================== */ diff --git a/libgnucash/engine/qofid.cpp b/libgnucash/engine/qofid.cpp index ac689ff7c1..1f50e95fc3 100644 --- a/libgnucash/engine/qofid.cpp +++ b/libgnucash/engine/qofid.cpp @@ -234,6 +234,7 @@ qof_collection_from_glist (QofIdType type, const GList *glist) ent = QOF_INSTANCE(list->data); if (FALSE == qof_collection_add_entity(coll, ent)) { + qof_collection_destroy(coll); return NULL; } }