Fixes NB#138261, settings dialog not shown when the password is incorrect
[modest] / src / modest-utils.c
index 4447e5e..8df81af 100644 (file)
@@ -71,7 +71,7 @@ modest_utils_folder_writable (const gchar *filename)
        if (!filename)
                return FALSE;
 
-       if (g_strncasecmp (filename, "obex", 4) != 0) {
+       if (g_ascii_strncasecmp (filename, "obex", 4) != 0) {
                GnomeVFSFileInfo *folder_info = NULL;
                GnomeVFSResult result = GNOME_VFS_OK;
                GnomeVFSURI *uri = NULL;
@@ -106,16 +106,20 @@ modest_utils_folder_writable (const gchar *filename)
 gboolean
 modest_utils_file_exists (const gchar *filename)
 {
-       GnomeVFSURI *uri = NULL;
        gboolean result = FALSE;
+       gchar *path;
 
        g_return_val_if_fail (filename, FALSE);
 
-       uri = gnome_vfs_uri_new (filename);
-       if (uri) {
-               result = gnome_vfs_uri_exists (uri);
-               gnome_vfs_uri_unref (uri);
-       }
+       path = strstr (filename, "file://");
+       if (!path)
+               path = (gchar *) filename;
+       else
+               path = (gchar *) filename + strlen ("file://");
+
+       if (g_access (path, F_OK) == 0)
+               result = TRUE;
+
        return result;
 }
 
@@ -124,19 +128,23 @@ modest_utils_create_temp_stream (const gchar *orig_name, const gchar *hash_base,
 {
        gint fd;
        gchar *filepath = NULL;
-       gchar *tmpdir;
+       gchar *tmpdir, *tmp;
        guint hash_number;
 
        /* hmmm... maybe we need a modest_text_utils_validate_file_name? */
        g_return_val_if_fail (orig_name && strlen(orig_name) != 0, NULL);
 
-       if (strlen(orig_name) > 200) {
+       tmp = g_uri_escape_string (orig_name, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT, FALSE);
+
+       if (strlen(tmp) > 200) {
+               g_free (tmp);
                g_warning ("%s: filename too long ('%s')",
                           __FUNCTION__, orig_name);
                return NULL;
        }
 
-       if (g_strstr_len (orig_name, strlen(orig_name), "/") != NULL) {
+       if (g_strstr_len (tmp, strlen (tmp), "/") != NULL) {
+               g_free (tmp);
                g_warning ("%s: filename contains '/' character(s) (%s)",
                           __FUNCTION__, orig_name);
                return NULL;
@@ -156,15 +164,15 @@ modest_utils_create_temp_stream (const gchar *orig_name, const gchar *hash_base,
                return NULL;
        }
 
-       filepath = g_strconcat (tmpdir, "/", orig_name, NULL);
+       filepath = g_build_filename (tmpdir, tmp, NULL);
+       g_free (tmp);
 
        /* if file exists, first we try to remove it */
-       if (modest_utils_file_exists (filepath)) {
+       if (g_access (filepath, F_OK) == 0)
                g_unlink (filepath);
-       }
 
        /* don't overwrite if it already exists, even if it is writable */
-       if (modest_utils_file_exists (filepath)) {
+       if (g_access (filepath, F_OK) == 0) {
                if (path!=NULL) {
                        *path = filepath;
                } else {
@@ -1131,6 +1139,8 @@ free_notification_data (gpointer data,
        g_free (notification_data->from);
        g_free (notification_data->subject);
        g_free (notification_data->uri);
+
+       g_slice_free (ModestMsgNotificationData, notification_data);
 }
 
 void