diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index a6f602ed64..1de3ab579a 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,3 +1,12 @@ +2006-03-20 Matthias Clasen + + * gdk-pixbuf-animation.c: + * gdk-pixbuf-io.c: + * io-xpm.c: + * io-xbm.c: + * io-gif.c: Always save errno to a temporary before making + other calls. (#335179, Morten Welinder) + 2006-03-14 Matthias Clasen * io-gif.c (gdk_pixbuf__gif_image_load): Add a shortcut diff --git a/gdk-pixbuf/gdk-pixbuf-animation.c b/gdk-pixbuf/gdk-pixbuf-animation.c index ad7e76fc9c..e45bcfcd2b 100644 --- a/gdk-pixbuf/gdk-pixbuf-animation.c +++ b/gdk-pixbuf/gdk-pixbuf-animation.c @@ -147,12 +147,13 @@ gdk_pixbuf_animation_new_from_file (const char *filename, display_name = g_filename_display_name (filename); f = g_fopen (filename, "rb"); if (!f) { + gint save_errno = errno; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to open file '%s': %s"), display_name, - g_strerror (errno)); + g_strerror (save_errno)); g_free (display_name); return NULL; } diff --git a/gdk-pixbuf/gdk-pixbuf-io.c b/gdk-pixbuf/gdk-pixbuf-io.c index 52c30838a2..a76f46431a 100644 --- a/gdk-pixbuf/gdk-pixbuf-io.c +++ b/gdk-pixbuf/gdk-pixbuf-io.c @@ -851,12 +851,13 @@ gdk_pixbuf_new_from_file (const char *filename, f = g_fopen (filename, "rb"); if (!f) { + gint save_errno = errno; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to open file '%s': %s"), display_name, - g_strerror (errno)); + g_strerror (save_errno)); g_free (display_name); return NULL; } @@ -1101,13 +1102,14 @@ gdk_pixbuf_new_from_file_at_scale (const char *filename, f = g_fopen (filename, "rb"); if (!f) { + gint save_errno = errno; gchar *display_name = g_filename_display_name (filename); g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to open file '%s': %s"), display_name, - g_strerror (errno)); + g_strerror (save_errno)); g_free (display_name); return NULL; } @@ -1370,11 +1372,12 @@ save_to_file_callback (const gchar *buf, n = fwrite (buf, 1, count, filehandle); if (n != count) { + gint save_errno = errno; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Error writing to image file: %s"), - g_strerror (errno)); + g_strerror (save_errno)); return FALSE; } return TRUE; @@ -1462,9 +1465,10 @@ save_to_callback_with_tmp_file (GdkPixbufModule *image_module, goto end; f = fdopen (fd, "wb+"); if (f == NULL) { + gint save_errno = errno; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to open temporary file")); goto end; } @@ -1487,9 +1491,10 @@ save_to_callback_with_tmp_file (GdkPixbufModule *image_module, break; } if (ferror (f)) { + gint save_errno = errno; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to read from temporary file")); goto end; } @@ -1720,13 +1725,14 @@ gdk_pixbuf_savev (GdkPixbuf *pixbuf, f = g_fopen (filename, "wb"); if (f == NULL) { + gint save_errno = errno; gchar *display_name = g_filename_display_name (filename); g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to open '%s' for writing: %s"), display_name, - g_strerror (errno)); + g_strerror (save_errno)); g_free (display_name); return FALSE; } @@ -1744,13 +1750,14 @@ gdk_pixbuf_savev (GdkPixbuf *pixbuf, } if (fclose (f) < 0) { + gint save_errno = errno; gchar *display_name = g_filename_display_name (filename); g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to close '%s' while writing image, all data may not have been saved: %s"), display_name, - g_strerror (errno)); + g_strerror (save_errno)); g_free (display_name); return FALSE; } diff --git a/gdk-pixbuf/io-gif.c b/gdk-pixbuf/io-gif.c index 886ef9a594..74fab8cc6e 100644 --- a/gdk-pixbuf/io-gif.c +++ b/gdk-pixbuf/io-gif.c @@ -214,11 +214,14 @@ gif_read (GifContext *context, guchar *buffer, size_t len) #endif retval = (fread(buffer, len, 1, context->file) != 0); - if (!retval && ferror (context->file)) + if (!retval && ferror (context->file)) { + gint save_errno = errno; g_set_error (context->error, G_FILE_ERROR, - g_file_error_from_errno (errno), - _("Failure reading GIF: %s"), strerror (errno)); + g_file_error_from_errno (save_errno), + _("Failure reading GIF: %s"), + strerror (save_errno)); + } #ifdef IO_GIFDEBUG if (len < 100) { diff --git a/gdk-pixbuf/io-xbm.c b/gdk-pixbuf/io-xbm.c index 90d8120a18..5fe2cafdd0 100644 --- a/gdk-pixbuf/io-xbm.c +++ b/gdk-pixbuf/io-xbm.c @@ -435,10 +435,11 @@ gdk_pixbuf__xbm_image_load_increment (gpointer data, g_return_val_if_fail (data != NULL, FALSE); if (fwrite (buf, sizeof (guchar), size, context->file) != size) { + gint save_errno = errno; context->all_okay = FALSE; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to write to temporary file when loading XBM image")); return FALSE; } diff --git a/gdk-pixbuf/io-xpm.c b/gdk-pixbuf/io-xpm.c index 3357aab4b5..8959a04836 100644 --- a/gdk-pixbuf/io-xpm.c +++ b/gdk-pixbuf/io-xpm.c @@ -769,10 +769,11 @@ gdk_pixbuf__xpm_image_load_increment (gpointer data, g_return_val_if_fail (data != NULL, FALSE); if (fwrite (buf, sizeof (guchar), size, context->file) != size) { + gint save_errno = errno; context->all_okay = FALSE; g_set_error (error, G_FILE_ERROR, - g_file_error_from_errno (errno), + g_file_error_from_errno (save_errno), _("Failed to write to temporary file when loading XPM image")); return FALSE; }