X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-file-helpers.c;h=3da4a59832d5031bedac8c19a00c3ef62fc4686b;hb=776a6fe02961d8901d21e172633d3c8d1c85dc93;hp=2546fe700d4282ebc6902c00a931a280b520535d;hpb=9a9e42bd0d8922c844d439b143524254ee5441b2;p=evince.git diff --git a/libdocument/ev-file-helpers.c b/libdocument/ev-file-helpers.c index 2546fe70..3da4a598 100644 --- a/libdocument/ev-file-helpers.c +++ b/libdocument/ev-file-helpers.c @@ -122,6 +122,12 @@ ev_tmp_filename (const gchar *prefix) return filename; } +gchar * +ev_tmp_directory (const gchar *prefix) +{ + return ev_tmp_filename (prefix ? prefix : "directory"); +} + /* Remove a local temp file created by evince */ void ev_tmp_filename_unlink (const gchar *filename) @@ -176,6 +182,16 @@ ev_tmp_uri_unlink (const gchar *uri) g_object_unref (file); } +/** + * ev_xfer_uri_simple: + * @from: the source URI + * @to: the target URI + * @error: a #GError location to store an error, or %NULL + * + * Performs a g_file_copy() from @from to @to. + * + * Returns: %TRUE on success, or %FALSE on error with @error filled in + */ gboolean ev_xfer_uri_simple (const char *from, const char *to, @@ -183,12 +199,13 @@ ev_xfer_uri_simple (const char *from, { GFile *source_file; GFile *target_file; - GError *ioerror = NULL; gboolean result; if (!from) - return FALSE; - + return TRUE; + + g_return_val_if_fail (to != NULL, TRUE); + source_file = g_file_new_for_uri (from); target_file = g_file_new_for_uri (to); @@ -197,16 +214,12 @@ ev_xfer_uri_simple (const char *from, G_FILE_COPY_TARGET_DEFAULT_PERMS | #endif G_FILE_COPY_OVERWRITE, - NULL, NULL, NULL, &ioerror); + NULL, NULL, NULL, error); g_object_unref (target_file); g_object_unref (source_file); - if (!result) { - g_propagate_error (error, ioerror); - } return result; - } static gchar * @@ -215,6 +228,7 @@ get_mime_type_from_uri (const gchar *uri, GError **error) GFile *file; GFileInfo *file_info; const gchar *content_type; + gchar *mime_type = NULL; file = g_file_new_for_uri (uri); file_info = g_file_query_info (file, @@ -226,12 +240,12 @@ get_mime_type_from_uri (const gchar *uri, GError **error) return NULL; content_type = g_file_info_get_content_type (file_info); - g_object_unref (file_info); - - if (!content_type) - return NULL; + if (content_type) { + mime_type = g_content_type_get_mime_type (content_type); + } - return g_content_type_get_mime_type (content_type); + g_object_unref (file_info); + return mime_type; } static gchar * @@ -315,15 +329,22 @@ compression_run (const gchar *uri, gchar *filename, *filename_dst; gchar *cmd; gint fd, pout; + GError *err = NULL; if (type == EV_COMPRESSION_NONE) return NULL; cmd = g_find_program_in_path ((type == EV_COMPRESSION_BZIP2) ? BZIPCOMMAND : GZIPCOMMAND); - if (!cmd) + if (!cmd) { + /* FIXME: better error codes! */ + /* FIXME: i18n later */ + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + "Failed to find the \"%s\" command in the search path.", + type == EV_COMPRESSION_BZIP2 ? BZIPCOMMAND : GZIPCOMMAND); return NULL; + } - filename = g_filename_from_uri (uri, NULL, NULL); + filename = g_filename_from_uri (uri, NULL, error); if (!filename) { g_free (cmd); return NULL; @@ -332,9 +353,16 @@ compression_run (const gchar *uri, filename_dst = g_build_filename (ev_tmp_dir (), "evinceXXXXXX", NULL); fd = g_mkstemp (filename_dst); if (fd < 0) { + int errsv = errno; + g_free (cmd); g_free (filename); g_free (filename_dst); + + g_set_error (error, G_IO_ERROR, + g_io_error_from_errno (errsv), + "Error creating a temporary file: %s", + g_strerror (errsv)); return NULL; } @@ -346,7 +374,7 @@ compression_run (const gchar *uri, if (g_spawn_async_with_pipes (NULL, argv, NULL, G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, NULL, - NULL, &pout, NULL, error)) { + NULL, &pout, NULL, &err)) { GIOChannel *in, *out; gchar buf[BUFFER_SIZE]; GIOStatus read_st, write_st; @@ -380,8 +408,10 @@ compression_run (const gchar *uri, close (fd); - if (*error == NULL) { - uri_dst = g_filename_to_uri (filename_dst, NULL, NULL); + if (err) { + g_propagate_error (error, err); + } else { + uri_dst = g_filename_to_uri (filename_dst, NULL, error); } g_free (cmd);