diff options
Diffstat (limited to 'libsylph')
-rw-r--r-- | libsylph/libsylph-0.def | 1 | ||||
-rw-r--r-- | libsylph/procmime.c | 43 | ||||
-rw-r--r-- | libsylph/procmime.h | 2 |
3 files changed, 43 insertions, 3 deletions
diff --git a/libsylph/libsylph-0.def b/libsylph/libsylph-0.def index 939cf1fc..3a2f740d 100644 --- a/libsylph/libsylph-0.def +++ b/libsylph/libsylph-0.def @@ -709,3 +709,4 @@ EXPORTS export_msgs_to_mbox @ 708
copy_file_stream @ 709
procmsg_save_message_as_text @ 710
+ procmime_get_tmp_file_name_for_user @ 711
diff --git a/libsylph/procmime.c b/libsylph/procmime.c index 298c3cf9..f8f88e4e 100644 --- a/libsylph/procmime.c +++ b/libsylph/procmime.c @@ -1471,12 +1471,38 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo) { static guint32 id = 0; gchar *base; - gchar *filename; + gchar *filename = NULL; gchar f_prefix[10]; g_return_val_if_fail(mimeinfo != NULL, NULL); - g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++); + if (MIME_TEXT_HTML == mimeinfo->mime_type) + base = g_strdup("mimetmp.html"); + else + base = procmime_get_part_file_name(mimeinfo); + + do { + g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++); + if (filename) + g_free(filename); + filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, + f_prefix, base, NULL); + } while (is_file_entry_exist(filename)); + + g_free(base); + + debug_print("procmime_get_tmp_file_name: %s\n", filename); + + return filename; +} + +gchar *procmime_get_tmp_file_name_for_user(MimeInfo *mimeinfo) +{ + gchar *base; + gchar *filename; + gint count = 1; + + g_return_val_if_fail(mimeinfo != NULL, NULL); if (MIME_TEXT_HTML == mimeinfo->mime_type) base = g_strdup("mimetmp.html"); @@ -1484,10 +1510,21 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo) base = procmime_get_part_file_name(mimeinfo); filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, - f_prefix, base, NULL); + base, NULL); + while (is_file_entry_exist(filename)) { + gchar *base_alt; + + base_alt = get_alt_filename(base, count++); + g_free(filename); + filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, + base_alt, NULL); + g_free(base_alt); + } g_free(base); + debug_print("procmime_get_tmp_file_name_for_user: %s\n", filename); + return filename; } diff --git a/libsylph/procmime.h b/libsylph/procmime.h index 1247601d..0242d34f 100644 --- a/libsylph/procmime.h +++ b/libsylph/procmime.h @@ -196,6 +196,8 @@ gboolean procmime_find_string (MsgInfo *msginfo, gchar *procmime_get_part_file_name (MimeInfo *mimeinfo); gchar *procmime_get_tmp_file_name (MimeInfo *mimeinfo); +gchar *procmime_get_tmp_file_name_for_user + (MimeInfo *mimeinfo); ContentType procmime_scan_mime_type (const gchar *mime_type); gchar *procmime_get_mime_type (const gchar *filename); |