From 0f1c723ad2fe48a0f22e32619985f93ebb2e02ef Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Sun, 25 Oct 2009 15:04:20 +0000 Subject: libdocument: Clean up temp file handling t push origin HEAD:master Make sure we can cope with not being able to create our temp directory. Bug #595372. --- (limited to 'shell') diff --git a/shell/ev-application.c b/shell/ev-application.c index bbd5ec6..2c6b509 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -885,7 +885,7 @@ ev_application_init (EvApplication *ev_application) NULL); /* FIXME: why make this fatal? */ - if (!ev_dir_ensure_exists (ev_application->dot_dir, 0700)) + if (!ev_dir_ensure_exists (ev_application->dot_dir, 0700, NULL)) exit (1); #ifdef G_OS_WIN32 diff --git a/shell/ev-sidebar-attachments.c b/shell/ev-sidebar-attachments.c index d89617b..74e89c4 100644 --- a/shell/ev-sidebar-attachments.c +++ b/shell/ev-sidebar-attachments.c @@ -410,7 +410,7 @@ ev_sidebar_attachments_drag_data_get (GtkWidget *widget, GtkTreePath *path; GtkTreeIter iter; GFile *file; - gchar *filename; + gchar *filename, *template, *name; GError *error = NULL; path = (GtkTreePath *) l->data; @@ -421,13 +421,12 @@ ev_sidebar_attachments_drag_data_get (GtkWidget *widget, COLUMN_ATTACHMENT, &attachment, -1); - filename = g_build_filename (ev_tmp_dir (), - ev_attachment_get_name (attachment), - NULL); - file = g_file_new_for_path (filename); - g_free (filename); + /* FIXMEchpe: convert to filename encoding first! */ + template = g_strdup_printf ("%s.XXXXXX", ev_attachment_get_name (attachment)); + file = ev_mkstemp_file (template, &error); + g_free (template); - if (ev_attachment_save (attachment, file, &error)) { + if (file != NULL && ev_attachment_save (attachment, file, &error)) { gchar *uri; uri = g_file_get_uri (file); diff --git a/shell/ev-window.c b/shell/ev-window.c index c55c9f8..042b4f9 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1708,19 +1708,30 @@ ev_window_load_file_remote (EvWindow *ev_window, GFile *target_file; if (!ev_window->priv->local_uri) { - gchar *tmp_name; - gchar *base_name; + char *base_name, *template; + GFile *tmp_file; + GError *err = NULL; /* We'd like to keep extension of source uri since - * it helps to resolve some mime types, say cbz */ - tmp_name = ev_tmp_filename (NULL); + * it helps to resolve some mime types, say cbz. + */ base_name = g_file_get_basename (source_file); - ev_window->priv->local_uri = g_strconcat ("file:", tmp_name, "-", - base_name, NULL); + template = g_build_filename ("document.XXXXXX-%s", base_name, NULL); + g_free (base_name); + + tmp_file = ev_mkstemp_file (template, &err); + if (tmp_file == NULL) { + ev_window_error_message (ev_window, err, + "%s", _("Failed to load remote file.")); + g_error_free (err); + return; + } + + ev_window->priv->local_uri = g_file_get_uri (tmp_file); + g_object_unref (tmp_file); + ev_job_load_set_uri (EV_JOB_LOAD (ev_window->priv->load_job), ev_window->priv->local_uri); - g_free (base_name); - g_free (tmp_name); } ev_window_reset_progress_cancellable (ev_window); @@ -4648,13 +4659,13 @@ ev_window_drag_data_received (GtkWidget *widget, static void ev_window_finalize (GObject *object) { + G_OBJECT_CLASS (ev_window_parent_class)->finalize (object); + if (ev_window_n_copies == 0) { ev_application_shutdown (EV_APP); } else { ev_window_n_copies--; } - - G_OBJECT_CLASS (ev_window_parent_class)->finalize (object); } static void @@ -5629,7 +5640,9 @@ image_save_dialog_response_cb (GtkWidget *fc, if (is_native) { filename = g_file_get_path (target_file); } else { - filename = ev_tmp_filename ("saveimage"); + /* Create a temporary local file to save to */ + if (ev_mkstemp ("saveimage.XXXXXX", &filename, &error) == -1) + goto has_error; } ev_document_doc_mutex_lock (); @@ -5642,6 +5655,7 @@ image_save_dialog_response_cb (GtkWidget *fc, g_free (file_format); g_object_unref (pixbuf); + has_error: if (error) { ev_window_error_message (ev_window, error, "%s", _("The image could not be saved.")); @@ -5774,7 +5788,7 @@ attachment_save_dialog_response_cb (GtkWidget *fc, for (l = ev_window->priv->attach_list; l && l->data; l = g_list_next (l)) { EvAttachment *attachment; - GFile *save_to; + GFile *save_to = NULL; GError *error = NULL; attachment = (EvAttachment *) l->data; @@ -5782,15 +5796,17 @@ attachment_save_dialog_response_cb (GtkWidget *fc, if (is_native) { if (is_dir) { save_to = g_file_get_child (target_file, + /* FIXMEchpe: file name encoding! */ ev_attachment_get_name (attachment)); } else { save_to = g_object_ref (target_file); } } else { - save_to = ev_tmp_file_get ("saveattachment"); + save_to = ev_mkstemp_file ("saveattachment.XXXXXX", &error); } - ev_attachment_save (attachment, save_to, &error); + if (save_to) + ev_attachment_save (attachment, save_to, &error); if (error) { ev_window_error_message (ev_window, error, -- cgit v0.9.1