From 54382354895b9048dfbca24d99397ac9779c9c79 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 5 Sep 2024 17:47:50 +0600 Subject: [PATCH] Leaks fixes --- source/ubinstall-gtk.c | 58 +++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 8625e99..7ce380a 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -355,14 +355,16 @@ void yon_interface_update(main_window *widgets){ int langsize; config_str lang = default_langs(&langsize); for_iter(widgets->LanguagesList,&iter){ - char *cur; + char *cur=NULL; gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguagesList),&iter,2,&cur,-1); if (lang&&yon_char_parsed_check_exist(lang,langsize,cur)>-1){ gtk_list_store_set(widgets->LanguagesList,&iter,0,1,-1); } else { gtk_list_store_set(widgets->LanguagesList,&iter,0,0,-1); } + if (cur) free(cur); } + if (langsize) yon_char_parsed_free(lang,langsize); // gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter)); } @@ -921,7 +923,7 @@ int yon_image_resize_from_container(GtkImage *target, GdkPixbuf *pixbuf_unscaled GdkPixbuf *scaledPixBuf = gdk_pixbuf_scale_simple(pixbuf_unscaled, newImageWidth, newImgHeight, GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf(target, scaledPixBuf); - g_object_unref(scaledPixBuf); // Освобождаем память, занятую скалированным изображением + g_object_unref(scaledPixBuf); return 1; } @@ -1048,10 +1050,10 @@ gboolean yon_installation_progress_update(void *data) { yon_char_parsed_free(parsed, size); } - yon_char_parsed_free(text, size); free(current_copy); free(percentage); } + yon_char_parsed_free(text, size); } if (main_config.install_thread) { @@ -1986,8 +1988,10 @@ void on_region_changed(GtkComboBox *self, main_window *widgets){ for (int i=0;iZoneCombo),parsed[i],_(parsed[i])); } + if (size) yon_char_parsed_free(parsed,size); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ZoneCombo),0); } + free(active); } void on_locale_changed(GtkWidget *,main_window *); @@ -2226,13 +2230,18 @@ void on_gparted_open(){ gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets); -void on_exit_accepted(GtkWidget *,main_window *widgets); -void on_exit_accepted(GtkWidget *,main_window *widgets){ +void on_exit_accepted(GtkWidget *,dictionary *dict); +void on_exit_accepted(GtkWidget *,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + confirmation_window *window = yon_dictionary_get_data(dict->first->next,confirmation_window*); if (main_config.install_thread){ pthread_cancel((pthread_t)main_config.install_thread); } main_config.exit_accepted=1; g_signal_emit_by_name(G_OBJECT(widgets->MainWindow),"delete-event",widgets->MainWindow,NULL); + free(window); + yon_dictionary_free_all(dict,NULL); + free(dict); gtk_widget_destroy(widgets->MainWindow); } @@ -2244,7 +2253,10 @@ gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets){ window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_exit_accepted),widgets); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_exit_accepted),dict); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow)); @@ -2532,9 +2544,15 @@ main_window *yon_main_window_complete(){ int width = gdk_pixbuf_get_width(widgets->regions_original); int height = gdk_pixbuf_get_height(widgets->regions_original); widgets->region_height_mult = (float)height/width; - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->RegionImage),gdk_pixbuf_scale_simple(widgets->regions_original,600,400,GDK_INTERP_BILINEAR)); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->KeyboardImage),gdk_pixbuf_scale_simple(widgets->keyboard_original,600,400,GDK_INTERP_BILINEAR)); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->SlidesImage),gdk_pixbuf_scale_simple(widgets->slides_original[0],600,400,GDK_INTERP_BILINEAR)); + GdkPixbuf *pix = gdk_pixbuf_scale_simple(widgets->regions_original,600,400,GDK_INTERP_BILINEAR); + gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->RegionImage),pix); + g_object_unref(pix); + pix = gdk_pixbuf_scale_simple(widgets->keyboard_original,600,400,GDK_INTERP_BILINEAR); + gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->KeyboardImage),pix); + g_object_unref(pix); + pix = gdk_pixbuf_scale_simple(widgets->slides_original[0],600,400,GDK_INTERP_BILINEAR); + gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->SlidesImage),pix); + g_object_unref(pix); int langsize; config_str lang = default_langs(&langsize); @@ -2579,11 +2597,14 @@ main_window *yon_main_window_complete(){ gtk_tree_store_append(widgets->LayoutList,&iter,NULL); gtk_tree_store_set(widgets->LayoutList,&iter,0,layout[0],1,_(layout[1]),2,1,-1); yon_char_parsed_free(layout,layout_size); - layout = yon_config_load(get_layouts_local_command(layout_id),&layout_size); + char *command = get_layouts_local_command(layout_id); + config_str layout_local = yon_config_load(command,&layout_size); + free(command); + free(layout_id); for (int j=0;jLayoutList,&itar,&iter); gtk_tree_store_set(widgets->LayoutList,&itar,0,layouts_parsed[0],1,_(layouts_parsed[1]),2,1,3,0,-1); @@ -2593,7 +2614,7 @@ main_window *yon_main_window_complete(){ if (layout_size==-1) { gtk_tree_store_set(widgets->LayoutList,&iter,2,1,-1); } - yon_char_parsed_free(layout,layout_size); + yon_char_parsed_free(layout_local,layout_size); } } yon_char_parsed_free(parsed,size); @@ -2603,6 +2624,7 @@ main_window *yon_main_window_complete(){ struct json_object *root; struct json_object *blockdevices; root = json_tokener_parse(string); + free(string); json_object_object_get_ex(root, "blockdevices", &blockdevices); for (long unsigned int i = 0; i < json_object_array_length(blockdevices); i++) { struct json_object *device = json_object_array_get_idx(blockdevices, i); @@ -2616,6 +2638,7 @@ main_window *yon_main_window_complete(){ gtk_list_store_append(widgets->DevicesList,&iter); gtk_list_store_set(widgets->DevicesList,&iter,0,json_object_get_string(path),1,json_object_get_string(model),2,json_object_get_string(serial),3,json_object_get_string(size),4,json_object_get_string(vendor),-1); + } yon_char_parsed_free(parsed,size); } @@ -2627,8 +2650,10 @@ main_window *yon_main_window_complete(){ if (module_size){ gtk_list_store_append(widgets->AdditionalSoftwareList,&iter); gtk_list_store_set(widgets->AdditionalSoftwareList,&iter,0,1,1,module_parsed[0],3,module_parsed[1],-1); //2,module_parsed[2] + yon_char_parsed_free(module_parsed,module_size); } } + if (size) yon_char_parsed_free(parsed,size); config_str models = yon_config_load(get_models_command,&size); for (int i=0;iKeyboardModelCombo),models[i],_(models[i+1])); } + if (size) yon_char_parsed_free(models,size); gtk_builder_connect_signals(builder,NULL); yon_load_proceed(YON_CONFIG_DEFAULT); yon_interface_update(widgets); @@ -2724,12 +2750,14 @@ int main(int argc, char *argv[]){ main_window *widgets = NULL; widgets = yon_main_window_complete(); yon_window_config_setup(GTK_WINDOW(widgets->MainWindow)); - - yon_window_config_load(config_path); + char *window_config_path = config_path; + yon_window_config_load(window_config_path); + free(window_config_path); GtkCssProvider *css=gtk_css_provider_new(); gtk_css_provider_load_from_resource(css,CssPath); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(css), -1); gtk_main(); + free(widgets); } \ No newline at end of file