commit dab376b8b67c043a8a5e937abc4452cdd533eaac from: Oliver Lowe date: Sat Nov 29 00:51:21 2025 UTC Start removing address book pictures commit - 36067e24da07e071cb6ca722029a484ac9d48fed commit + dab376b8b67c043a8a5e937abc4452cdd533eaac blob - bb2e3fb2564fa3f8a2f9b351927f9f687c7874c0 blob + 64bc8733fecc8915eec899c37c5f8ee6265c8d6d --- src/addritem.c +++ src/addritem.c @@ -270,42 +270,24 @@ void addritem_person_set_picture( ItemPerson *person, } } -/** - * Get picture filename for person object. - * \param person Person object. - * \return copy of picture file path string (to be freed by caller - and there is - * no guarantee that path does exist, or NULL. - */ -gchar *addritem_person_get_picture( ItemPerson *person) { - if (person->picture) - return g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, - ADDRBOOK_DIR, G_DIR_SEPARATOR_S, person->picture, - ".png", NULL ); - return NULL; +size_t addritem_person_get_picture(char *dst, ItemPerson *person) { + if (!person->picture) + return 0; + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/%s/%s.png", get_rc_dir(), ADDRBOOK_DIR, person->picture); + return strlcpy(dst, buf, sizeof(dst)); } -/** - * Delete picture for person object. - * \param person Person object. - */ -void addritem_person_remove_picture( ItemPerson *person) { - if (person->picture) { - gchar *filename = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, - ADDRBOOK_DIR, G_DIR_SEPARATOR_S, person->picture, - ".png", NULL ); - if (is_file_exist(filename)) { - debug_print("removing addressbook picture %s\n", - filename); - if (unlink(filename) < 0) { - FILE_OP_ERROR(filename, "remove"); - g_free(filename); - return; - } - } - g_free(person->picture); - person->picture = NULL; - g_free(filename); - } +int addritem_person_remove_picture(ItemPerson *person) { + if (!person->picture) + return 0; + + char path[PATH_MAX]; + snprintf(path, sizeof(path), "%s/%s/%s", get_rc_dir(), ADDRBOOK_DIR, person->picture); + int ret = unlink(path); + free(person->picture); + person->picture = NULL; + return ret; } /** blob - 926ebc75aefe4db6acceb07218cb80aade1e5eca blob + 651c6694ba8b85a8d96c6bdbf64bc53288d89af6 --- src/addritem.h +++ src/addritem.h @@ -136,8 +136,8 @@ void addritem_free_attribute ( UserAttribute *item ); ItemPerson *addritem_create_item_person ( void ); ItemPerson *addritem_copy_item_person ( ItemPerson *item ); void addritem_person_set_picture ( ItemPerson *person, const gchar *value ); -gchar *addritem_person_get_picture ( ItemPerson *person); -void addritem_person_remove_picture ( ItemPerson *person); +size_t addritem_person_get_picture (char *dst, ItemPerson *person); +int addritem_person_remove_picture ( ItemPerson *person); void addritem_person_set_first_name ( ItemPerson *person, const gchar *value ); void addritem_person_set_last_name ( ItemPerson *person, const gchar *value ); void addritem_person_set_nick_name ( ItemPerson *person, const gchar *value ); blob - f28511823e8aa91231e1a1aa71af322d7e28ee20 blob + 3c89870020ac69280bb24aa66eebf650c75ed848 --- src/addrmerge.c +++ src/addrmerge.c @@ -121,14 +121,10 @@ static void addrmerge_do_merge(struct AddrMergePage *p addritem_folder_remove_person(ADAPTER_FOLDER(page->pobj)->itemFolder, person); person = addrbook_remove_person( page->abf, person ); - if( person ) { - gchar *filename = addritem_person_get_picture(person); - if ((g_strcmp0(person->picture, target->picture) && - filename && is_file_exist(filename))) - unlink(filename); - if (filename) - g_free(filename); - addritem_free_item_person( person ); + if (person) { + char filename[PATH_MAX]; + if (addritem_person_get_picture(filename, person)) + remove(filename); } } @@ -201,10 +197,8 @@ static void addrmerge_prompt( struct AddrMergePage *pa GtkWidget *namesList = NULL; MainWindow *mainwin = mainwindow_get_mainwindow(); GtkListStore *store = NULL; - GtkTreeIter iter; GList *node; ItemPerson *person; - GError *error = NULL; gchar *msg, *label_msg; dialog = page->dialog = gtk_dialog_new_with_buttons ( @@ -241,66 +235,6 @@ static void addrmerge_prompt( struct AddrMergePage *pa gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); g_free(label_msg); - if (page->pickPicture) { - GtkWidget *scrollwinPictures; - - store = gtk_list_store_new(N_SET_COLUMNS, - GDK_TYPE_PIXBUF, - G_TYPE_POINTER, - -1); - gtk_list_store_clear(store); - - vbox = gtkut_get_options_frame(mvbox, &frame, - _("Keep which picture?")); - gtk_container_set_border_width(GTK_CONTAINER(frame), 4); - - scrollwinPictures = gtk_scrolled_window_new(NULL, NULL); - gtk_container_set_border_width(GTK_CONTAINER(scrollwinPictures), 1); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwinPictures), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwinPictures), - GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (vbox), scrollwinPictures, FALSE, FALSE, 0); - gtk_widget_set_size_request(scrollwinPictures, 464, 192); - - iconView = gtk_icon_view_new_with_model(GTK_TREE_MODEL(store)); - gtk_icon_view_set_selection_mode(GTK_ICON_VIEW(iconView), GTK_SELECTION_SINGLE); - gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(iconView), SET_ICON); - gtk_container_add(GTK_CONTAINER(scrollwinPictures), GTK_WIDGET(iconView)); - g_signal_connect(G_OBJECT(iconView), "selection-changed", - G_CALLBACK(addrmerge_picture_selected), page); - - /* Add pictures from persons */ - for (node = page->persons; node; node = node->next) { - gchar *filename; - person = node->data; - filename = addritem_person_get_picture(person); - if (filename && is_file_exist(filename)) { - GdkPixbuf *pixbuf; - GtkWidget *image; - - pixbuf = gdk_pixbuf_new_from_file(filename, &error); - if (error) { - debug_print("Failed to read image: \n%s", - error->message); - g_error_free(error); - continue; - } - - image = gtk_image_new(); - gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf); - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, - SET_ICON, pixbuf, - SET_PERSON, person, - -1); - } - if (filename) - g_free(filename); - } - } - if (page->pickName) { GtkWidget *scrollwinNames; gchar *name_titles[N_NAME_COLS]; @@ -374,11 +308,10 @@ void addrmerge_merge( AddrItemObject *aio; ItemPerson *person, *target = NULL, *nameTarget = NULL; GList *persons = NULL, *emails = NULL; - gboolean pickPicture = FALSE, pickName = FALSE; + gboolean pickName = FALSE; - /* Test for read only */ if( ds->interface->readOnly ) { - alertpanel_warning(_("This address data is read-only and cannot be deleted.")); + alertpanel_warning("This address data is read-only and cannot be deleted."); return; } @@ -409,28 +342,7 @@ void addrmerge_merge( } } - /* Check if more than one person has a picture */ - for (node = persons; node; node = node->next) { - gchar *filename; - person = node->data; - filename = addritem_person_get_picture(person); - if (filename && is_file_exist(filename)) { - if (target == NULL) { - target = person; - } else { - pickPicture = TRUE; - target = NULL; - g_free(filename); - break; - } - } - if (filename) - g_free(filename); - } - if (pickPicture || target) { - /* At least one person had a picture */ - } else if (persons && persons->data) { - /* No person had a picture. Use the first person as target */ + if (persons && persons->data) { target = persons->data; } else { /* No persons in list. Abort */ @@ -459,7 +371,7 @@ void addrmerge_merge( /* Create object */ page = g_new0(struct AddrMergePage, 1); - page->pickPicture = pickPicture; + page->pickPicture = FALSE; page->pickName = pickName; page->target = target; page->nameTarget = nameTarget; blob - 9164f098f5713f2a1f0f7cb259c4f9f1b1fe744a blob + 3f89d69e211dbc84fd5fde69c5ac885485b1c5a1 --- src/common/utils.h +++ src/common/utils.h @@ -36,14 +36,6 @@ #endif #include -/* The Hurd doesn't have these limits */ -#ifndef PATH_MAX - #define PATH_MAX 4196 -#endif -#ifndef HOST_NAME_MAX - #define HOST_NAME_MAX 256 -#endif - /* Handling Base64 content in procmime and prefs_customheader */ #define B64_LINE_SIZE 57 blob - 83aea785c9ef73d75aee06e47aef722ab135b93a blob + 28567290bd0264bd4f8fdb8535f84e460ef3c403 --- src/compose.c +++ src/compose.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -7855,8 +7856,8 @@ static void compose_ext_editor_closed_cb(GPid pid, gin if (compose_can_autosave(compose)) compose_draft((gpointer)compose, COMPOSE_AUTO_SAVE); - if (unlink(compose->exteditor_file) < 0) - FILE_OP_ERROR(compose->exteditor_file, "unlink"); + if (remove(compose->exteditor_file) < 0) + warn("remove %s", compose->exteditor_file); gtk_text_buffer_get_start_iter(buffer, &iter); blob - 36c8e1f16a1d49b8d87394a563b675205ca43797 blob + 6b516dba307873d8349b574c11a22d27f055275c --- src/editaddress.c +++ src/editaddress.c @@ -1243,37 +1243,6 @@ static gboolean addressbook_edit_person_close( gboolea addritem_person_set_common_name( current_person, cn ); g_free( cn ); - if (personeditdlg.picture_set) { - GdkPixbuf * pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(personeditdlg.image)); - - if (!current_person->picture) - name = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, ADDRBOOK_DIR, G_DIR_SEPARATOR_S, - ADDRITEM_ID(current_person), ".png", NULL ); - else - name = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, ADDRBOOK_DIR, G_DIR_SEPARATOR_S, - current_person->picture, ".png", NULL ); - - gdk_pixbuf_save(pixbuf, name, "png", &error, NULL); - if (error) { - alertpanel_error(_("Failed to save image: \n%s"), - error->message); - g_error_free(error); - } else { - debug_print("saved picture to %s\n", name); - } - if (!current_person->picture) - addritem_person_set_picture( current_person, ADDRITEM_ID(current_person) ) ; - g_free( name ); - } else { - if (!current_person->picture) - name = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, ADDRBOOK_DIR, G_DIR_SEPARATOR_S, - ADDRITEM_ID(current_person), ".png", NULL ); - else - name = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, ADDRBOOK_DIR, G_DIR_SEPARATOR_S, - current_person->picture, ".png", NULL ); - unlink(name); - g_free(name); - } name = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_first), 0, -1 ); addritem_person_set_first_name( current_person, name ); g_free( name ); @@ -1360,35 +1329,6 @@ ItemPerson *addressbook_edit_person( AddressBookFile * if( ADDRITEM_NAME(current_person) ) gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_name), ADDRITEM_NAME(person) ); - - if( current_person->picture ) { - filename = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, ADDRBOOK_DIR, G_DIR_SEPARATOR_S, - current_person->picture, ".png", NULL ); - if (is_file_exist(filename)) { - pixbuf = gdk_pixbuf_new_from_file(filename, &error); - if (error) { - debug_print("Failed to import image: %s\n", - error->message); - g_error_free(error); - goto no_img; - } - personeditdlg.picture_set = TRUE; - cm_menu_set_sensitive("EditAddressPopup/UnsetPicture", personeditdlg.picture_set); - } else { - goto no_img; - } - gtk_image_set_from_pixbuf(GTK_IMAGE(personeditdlg.image), pixbuf); - } else { -no_img: - addressbook_edit_person_clear_picture(); - } - - g_free(filename); - if (pixbuf) { - g_object_unref(pixbuf); - pixbuf = NULL; - } - if( current_person->firstName ) gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_first), current_person->firstName ); if( current_person->lastName ) blob - eb47fdfe16995f5d68a7f002a048695cadd735ea blob + e2eefa528a0db568c9fb1d27eb6edd40d97b8bf8 --- src/folder.c +++ src/folder.c @@ -804,7 +804,6 @@ gint folder_read_list(void) gint config_version = -1; path = folder_get_list_path(); - if (!is_file_exist(path)) return -1; node = xml_parse_file(path); if (!node) return -1; @@ -3781,8 +3780,7 @@ void folder_item_discard_cache(FolderItem *item) g_free(dir); cache = folder_item_get_cache_file(item); - if (is_file_exist(cache)) - unlink(cache); + unlink(cache); g_free(cache); } blob - 85baa8232686d4520f03569e38563c5b9e21d852 blob + de3bd78cc6e5a49e046513d94e76226b8d84b634 --- src/imap.c +++ src/imap.c @@ -1369,16 +1369,14 @@ static gchar *imap_get_cached_filename(FolderItem *ite static void imap_remove_cached_msg(Folder *folder, FolderItem *item, MsgInfo *msginfo) { - gchar *filename; - - filename = imap_get_cached_filename(item, msginfo->msgnum); - - cm_return_if_fail(filename != NULL); - - if (is_file_exist(filename)) { - unlink(filename); + char *name = imap_get_cached_filename(item, msginfo->msgnum); + if (!name) { + warn("cannot get filename for message number %d", msginfo->msgnum); + return; } - g_free(filename); + if (remove(name) < 0) + warn("remove %s", name); + free(name); } static gchar *imap_fetch_msg_full(Folder *folder, FolderItem *item, gint uid, blob - 6fb652376d23bb63a6a3bced902b228b32797a96 blob + 5bd8b7b5d43bf52cc5a7a74f0d3b6569454bdbf4 --- src/main.c +++ src/main.c @@ -149,21 +149,6 @@ static void quit_signal_handler (int sig); static void install_basic_sighandlers (void); static void exit_claws (MainWindow *mainwin); -#define MAKE_DIR_IF_NOT_EXIST(dir) \ -{ \ - if (!is_dir_exist(dir)) { \ - if (is_file_exist(dir)) { \ - alertpanel_warning \ - (_("File '%s' already exists.\n" \ - "Can't create folder."), \ - dir); \ - return 1; \ - } \ - if (make_dir(dir) < 0) \ - return 1; \ - } \ -} - #define STRNCMP(S1, S2) (strncmp((S1), (S2), sizeof((S2)) - 1)) #define CM_FD_WRITE(S) fd_write(sock, (S), strlen((S))) @@ -381,23 +366,17 @@ int main(int argc, char *argv[]) g_free(userrc); CHDIR_RETURN_VAL_IF_FAIL(get_rc_dir(), 1); - MAKE_DIR_IF_NOT_EXIST(get_mail_base_dir()); - MAKE_DIR_IF_NOT_EXIST(get_mime_tmp_dir()); - MAKE_DIR_IF_NOT_EXIST(get_tmp_dir()); + if (mkdir(get_mail_base_dir(), 0755) < 0 && errno != EEXIST) + err(1, "make %s", get_mail_base_dir()); + if (mkdir(get_mime_tmp_dir(), 0755) < 0 && errno != EEXIST) + err(1, "make %s", get_mime_tmp_dir()); + if (mkdir(get_tmp_dir(), 0755) < 0 && errno != EEXIST) + err(1, "make %s", get_tmp_dir()); remove_all_files(get_tmp_dir()); remove_all_files(get_mime_tmp_dir()); - if (is_file_exist("claws.log")) { - if (rename_force("claws.log", "claws.log.bak") < 0) - FILE_OP_ERROR("claws.log", "rename"); - } set_log_file(LOG_PROTOCOL, "claws.log"); - - if (is_file_exist("filtering.log")) { - if (rename_force("filtering.log", "filtering.log.bak") < 0) - FILE_OP_ERROR("filtering.log", "rename"); - } set_log_file(LOG_DEBUG_FILTERING, "filtering.log"); CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), 1); blob - 42dc750da793ef3455105dea820790be8f17abd0 blob + 7ee6a4e8b56b0db644c5f8461963f0a629e72882 --- src/mh.c +++ src/mh.c @@ -301,23 +301,19 @@ gint mh_get_num_list(Folder *folder, FolderItem *item, return nummsgs; } -static gchar *mh_fetch_msg(Folder *folder, FolderItem *item, gint num) +static gchar *mh_fetch_msg(Folder *folder, FolderItem *item, int num) { - gchar *path; - gchar *file; - - cm_return_val_if_fail(item != NULL, NULL); - cm_return_val_if_fail(num > 0, NULL); - - path = folder_item_get_path(item); - file = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL); - - if (!is_file_exist(file)) { - g_free(file); - g_free(path); + if (item == NULL) { + warn("fetch message %d: NULL folder item", num); return NULL; + } else if (num <= 0) { + warn("fetch message %d: message number must be positive"); + return NULL; } - g_free(path); + + char *path = folder_item_get_path(item); + char *file = malloc(PATH_MAX); + snprintf(file, sizeof(file), "%s/%d", path, num); return file; }