From 379633a5ad7a5aec294c424ef500312beb1cc30a Mon Sep 17 00:00:00 2001 From: Simon Zheng Date: Tue, 21 Mar 2006 03:02:59 +0000 Subject: Fixed bug #326571 Add em_filename_make_safe(), and use it to allow 2006-03-21 Simon Zheng Fixed bug #326571 * em-utils.c (em_filename_make_safe), (emu_get_save_filesel), (emu_save_parts_response): Add em_filename_make_safe(), and use it to allow filenames contain more valid characters when saving attachments. svn path=/trunk/; revision=31726 --- mail/ChangeLog | 8 ++++++++ mail/em-utils.c | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/mail/ChangeLog b/mail/ChangeLog index 76c65d7ec6..b68d4e74ff 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,11 @@ +2006-03-21 Simon Zheng + + Fixed bug #326571 + * em-utils.c (em_filename_make_safe), (emu_get_save_filesel), + (emu_save_parts_response): + Add em_filename_make_safe(), and use it to allow filenames + contain more valid characters when saving attachments. + 2006-03-20 Srinivasa Ragavan * em-folder-view.c: (emfv_setup_view_instance): Added code to set the diff --git a/mail/em-utils.c b/mail/em-utils.c index 13f66166ef..458fd2c02c 100644 --- a/mail/em-utils.c +++ b/mail/em-utils.c @@ -322,6 +322,40 @@ em_utils_edit_filters (GtkWidget *parent) gtk_widget_show (GTK_WIDGET (filter_editor)); } +/* + * Picked this from e-d-s/libedataserver/e-data. + * But it allows more characters to occur in filenames, especially when saving attachment. + */ +void +em_filename_make_safe (gchar *string) +{ + gchar *p, *ts; + gunichar c; +#ifdef G_OS_WIN32 + const char *unsafe_chars = "/\":*?<>|\\"; +#else + const char *unsafe_chars = "/"; +#endif + + g_return_if_fail (string != NULL); + p = string; + + while(p && *p) { + c = g_utf8_get_char (p); + ts = p; + p = g_utf8_next_char (p); + /* I wonder what this code is supposed to actually + * achieve, and whether it does that as currently + * written? + */ + if (!g_unichar_isprint(c) || ( c < 0xff && strchr (unsafe_chars, c&0xff ))) { + while (ts