Revision: 1625 http://svn.sourceforge.net/geany/?rev=1625&view=rev Author: eht16 Date: 2007-06-15 10:16:06 -0700 (Fri, 15 Jun 2007)
Log Message: ----------- Fix sanity checks in utils_str_replace(). Fix several memleaks. Avoid using broken functions g_strdown() and g_strup(). Only create header and source files if filename is not empty.
Modified Paths: -------------- trunk/ChangeLog trunk/src/tools.c trunk/src/utils.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-06-15 16:10:59 UTC (rev 1624) +++ trunk/ChangeLog 2007-06-15 17:16:06 UTC (rev 1625) @@ -1,6 +1,6 @@ 2007-06-15 Frank Lanitz frank@frank.uvena.de
- * src/about.c: Update of About-dialog. + * src/about.c: Update of about dialog. * THANKS: Added Spanish translator Nacho Cabanes.
@@ -12,6 +12,11 @@ was closed by a delete event. Fix creation of class files with an empty name and some code reformatting. + * src/utils.c: Fix sanity checks in utils_str_replace(). + * src/tools.c: + Fix several memleaks. + Avoid using broken functions g_strdown() and g_strup(). + Only create header and source files if filename is not empty.
2007-06-14 Frank Lanitz frank@frank.uvena.de
Modified: trunk/src/tools.c =================================================================== --- trunk/src/tools.c 2007-06-15 16:10:59 UTC (rev 1624) +++ trunk/src/tools.c 2007-06-15 17:16:06 UTC (rev 1625) @@ -1175,37 +1175,41 @@ { gchar *base_name_splitted; gchar *base_header; - gchar *base_gtype = NULL; + gchar *tmp;
g_return_if_fail(entry != NULL); g_return_if_fail(GTK_IS_ENTRY(entry)); g_return_if_fail(cc_dlg != NULL);
base_name_splitted = str_case_split(gtk_entry_get_text(GTK_ENTRY(entry)), '_'); - base_header = g_strdup_printf("%s%s.h", + tmp = g_strdup_printf("%s%s.h", g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(entry)), "gtk", 3) ? "": "gtk/", gtk_entry_get_text(GTK_ENTRY(entry))); - g_strdown(base_header); + base_header = g_ascii_strdown(tmp, -1); + g_free(tmp);
gtk_entry_set_text(GTK_ENTRY(cc_dlg->base_header_entry), base_header);
if (cc_dlg->class_type == GEANY_CLASS_TYPE_GTK) { + gchar *base_gtype; if (! g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(entry)), "gtk", 3)) { - base_gtype = g_strdup_printf("%.3s_TYPE%s", + tmp = g_strdup_printf("%.3s_TYPE%s", base_name_splitted, base_name_splitted + 3); } else - base_gtype = g_strconcat(base_name_splitted, "_TYPE", NULL); - g_strup(base_gtype); + tmp = g_strconcat(base_name_splitted, "_TYPE", NULL); + base_gtype = g_ascii_strup(tmp, -1); gtk_entry_set_text(GTK_ENTRY(cc_dlg->base_gtype_entry), base_gtype); + + g_free(base_gtype); + g_free(tmp); }
g_free(base_name_splitted); g_free(base_header); - g_free(base_gtype); }
@@ -1214,6 +1218,7 @@ ClassInfo *class_info; gint idx; gchar *text; + gchar *tmp;
g_return_if_fail(cc_dlg != NULL);
@@ -1223,8 +1228,8 @@ class_info = g_new0(ClassInfo, 1); class_info->type = cc_dlg->class_type; class_info->class_name = g_strdup(gtk_entry_get_text(GTK_ENTRY(cc_dlg->class_name_entry))); - class_info->class_name_up = str_case_split(class_info->class_name, '_'); - g_strup(class_info->class_name_up); + tmp = str_case_split(class_info->class_name, '_'); + class_info->class_name_up = g_ascii_strup(tmp, -1); class_info->class_name_low = g_ascii_strdown(class_info->class_name_up, -1); if (*gtk_entry_get_text(GTK_ENTRY(cc_dlg->base_name_entry)) != '\0') { @@ -1317,16 +1322,30 @@ } }
- text = templates_get_template_class_source(class_info); - idx = document_new_file(class_info->source, NULL); - sci_set_text(doc_list[idx].sci, text); - g_free(text); + // only create the files if the filename is not empty + if (*class_info->source != '\0') + { + text = templates_get_template_class_source(class_info); + idx = document_new_file(class_info->source, NULL); + sci_set_text(doc_list[idx].sci, text); + g_free(text); + }
- text = templates_get_template_class_header(class_info); - idx = document_new_file(class_info->header, NULL); - sci_set_text(doc_list[idx].sci, text); - g_free(text); + if (*class_info->header != '\0') + { + text = templates_get_template_class_header(class_info); + idx = document_new_file(class_info->header, NULL); + sci_set_text(doc_list[idx].sci, text); + g_free(text); + }
gtk_object_destroy(GTK_OBJECT(cc_dlg->dialog)); + + utils_free_pointers(tmp, class_info->class_name, class_info->class_name_up, + class_info->base_name, class_info->class_name_low, class_info->base_include, + class_info->header, class_info->header_guard, class_info->source, class_info->base_decl, + class_info->constructor_decl, class_info->constructor_impl, + class_info->gtk_destructor_registration, class_info->destructor_decl, + class_info->destructor_impl, class_info->base_gtype, class_info, NULL); }
Modified: trunk/src/utils.c =================================================================== --- trunk/src/utils.c 2007-06-15 16:10:59 UTC (rev 1624) +++ trunk/src/utils.c 2007-06-15 17:16:06 UTC (rev 1625) @@ -881,12 +881,20 @@ gchar *result; GString *str;
- if (haystack == NULL) return NULL; + if (haystack == NULL) + return NULL;
+ if (needle == NULL || replacement == NULL) + return haystack; + + if (utils_str_equal(needle, replacement)) + return haystack; + start = strstr(haystack, needle); lt_pos = utils_strpos(haystack, needle);
- if (start == NULL || lt_pos == -1) return haystack; + if (start == NULL || lt_pos == -1) + return haystack;
// substitute by copying str = g_string_sized_new(strlen(haystack));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.