From 667c9d3eaf0487193cc7873e6d3a63959a03d7f9 Mon Sep 17 00:00:00 2001 From: Ricardo Mones Date: Wed, 9 Aug 2017 16:48:38 +0200 Subject: [PATCH] Fix bug #3855: segfault at startup with old profile and IMAP account Revert "Remove duplicated code and include". This reverts commit 300f811f3bbf10455ca55d9b01da6705dd1e07bb. --- src/imap.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/imap.c b/src/imap.c index 0e1e777aa..25bb2832f 100644 --- a/src/imap.c +++ b/src/imap.c @@ -77,6 +77,8 @@ typedef struct _IMAPSession IMAPSession; typedef struct _IMAPNameSpace IMAPNameSpace; typedef struct _IMAPFolderItem IMAPFolderItem; +#include "prefs_account.h" + #define IMAP_FOLDER(obj) ((IMAPFolder *)obj) #define IMAP_FOLDER_ITEM(obj) ((IMAPFolderItem *)obj) #define IMAP_SESSION(obj) ((IMAPSession *)obj) @@ -425,6 +427,7 @@ static gint imap_get_flags (Folder *folder, FolderItem *item, MsgInfoList *msglist, GHashTable *msgflags); +static gchar *imap_folder_get_path (Folder *folder); static gchar *imap_item_get_path (Folder *folder, FolderItem *item); static MsgInfo *imap_parse_msg(const gchar *file, FolderItem *item); @@ -3042,6 +3045,35 @@ static FolderItem *imap_create_special_folder(Folder *folder, return new_item; } +static gchar *imap_folder_get_path(Folder *folder) +{ + gchar *folder_path; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(folder->account != NULL, NULL); + +#ifdef G_OS_WIN32 + gchar *sanitized_dirname = g_strdup(folder->account->recv_server); + g_strdelimit(sanitized_dirname, ":", ','); +#endif + + folder_path = g_strconcat(get_imap_cache_dir(), + G_DIR_SEPARATOR_S, +#ifdef G_OS_WIN32 + sanitized_dirname, +#else + folder->account->recv_server, +#endif + G_DIR_SEPARATOR_S, + folder->account->userid, + NULL); + +#ifdef G_OS_WIN32 + g_free(sanitized_dirname); +#endif + return folder_path; +} + #ifdef G_OS_WIN32 static gchar *imap_encode_unsafe_chars(const gchar *str) { @@ -3078,9 +3110,8 @@ static gchar *imap_item_get_path(Folder *folder, FolderItem *item) gchar *item_path = NULL; g_return_val_if_fail(folder != NULL, NULL); - g_return_val_if_fail(folder->account != NULL, NULL); g_return_val_if_fail(item != NULL, NULL); - folder_path = prefs_account_cache_dir(folder->account, FALSE); + folder_path = imap_folder_get_path(folder); g_return_val_if_fail(folder_path != NULL, NULL); -- 2.25.1