Fix use of pointers to image library functions

* src/image.c (DEF_IMGLIB_FN): Add parameter rettype, use it instead
of int.  All uses adjusted.
(PNG_JMPBUF, png_load, jpeg_load, tiff_load, gif_load)
(svg_load_image): Remove casts.
This commit is contained in:
Andreas Schwab 2011-01-30 00:56:33 +01:00
parent c2e79cb408
commit df61c79005
2 changed files with 98 additions and 102 deletions

View file

@ -1,3 +1,10 @@
2011-01-29 Andreas Schwab <schwab@linux-m68k.org>
* image.c (DEF_IMGLIB_FN): Add parameter rettype, use it instead
of int. All uses adjusted.
(PNG_JMPBUF, png_load, jpeg_load, tiff_load, gif_load)
(svg_load_image): Remove casts.
2011-01-29 Chong Yidong <cyd@stupidchicken.com>
* image.c (fn_png_longjmp, fn_png_set_longjmp_fn): New png

View file

@ -1977,7 +1977,7 @@ mark_image_cache (struct image_cache *c)
#ifdef HAVE_NTGUI
/* Macro for defining functions that will be loaded from image DLLs. */
#define DEF_IMGLIB_FN(func) int (FAR CDECL *fn_##func)()
#define DEF_IMGLIB_FN(rettype, func) rettype (FAR CDECL *fn_##func)()
/* Macro for loading those image functions from the library. */
#define LOAD_IMGLIB_FN(lib,func) { \
@ -3387,10 +3387,10 @@ xpm_free_colors (dpy, cmap, pixels, npixels, closure)
/* XPM library details. */
DEF_IMGLIB_FN (XpmFreeAttributes);
DEF_IMGLIB_FN (XpmCreateImageFromBuffer);
DEF_IMGLIB_FN (XpmReadFileToImage);
DEF_IMGLIB_FN (XImageFree);
DEF_IMGLIB_FN (void, XpmFreeAttributes);
DEF_IMGLIB_FN (int, XpmCreateImageFromBuffer);
DEF_IMGLIB_FN (int, XpmReadFileToImage);
DEF_IMGLIB_FN (void, XImageFree);
static int
init_xpm_functions (Lisp_Object libraries)
@ -5568,31 +5568,31 @@ png_image_p (object)
#ifdef HAVE_NTGUI
/* PNG library details. */
DEF_IMGLIB_FN (png_get_io_ptr);
DEF_IMGLIB_FN (png_sig_cmp);
DEF_IMGLIB_FN (png_create_read_struct);
DEF_IMGLIB_FN (png_create_info_struct);
DEF_IMGLIB_FN (png_destroy_read_struct);
DEF_IMGLIB_FN (png_set_read_fn);
DEF_IMGLIB_FN (png_set_sig_bytes);
DEF_IMGLIB_FN (png_read_info);
DEF_IMGLIB_FN (png_get_IHDR);
DEF_IMGLIB_FN (png_get_valid);
DEF_IMGLIB_FN (png_set_strip_16);
DEF_IMGLIB_FN (png_set_expand);
DEF_IMGLIB_FN (png_set_gray_to_rgb);
DEF_IMGLIB_FN (png_set_background);
DEF_IMGLIB_FN (png_get_bKGD);
DEF_IMGLIB_FN (png_read_update_info);
DEF_IMGLIB_FN (png_get_channels);
DEF_IMGLIB_FN (png_get_rowbytes);
DEF_IMGLIB_FN (png_read_image);
DEF_IMGLIB_FN (png_read_end);
DEF_IMGLIB_FN (png_error);
DEF_IMGLIB_FN (png_voidp, png_get_io_ptr);
DEF_IMGLIB_FN (int, png_sig_cmp);
DEF_IMGLIB_FN (png_structp, png_create_read_struct);
DEF_IMGLIB_FN (png_infop, png_create_info_struct);
DEF_IMGLIB_FN (void, png_destroy_read_struct);
DEF_IMGLIB_FN (void, png_set_read_fn);
DEF_IMGLIB_FN (void, png_set_sig_bytes);
DEF_IMGLIB_FN (void, png_read_info);
DEF_IMGLIB_FN (png_uint_32, png_get_IHDR);
DEF_IMGLIB_FN (png_uint_32, png_get_valid);
DEF_IMGLIB_FN (void, png_set_strip_16);
DEF_IMGLIB_FN (void, png_set_expand);
DEF_IMGLIB_FN (void, png_set_gray_to_rgb);
DEF_IMGLIB_FN (void, png_set_background);
DEF_IMGLIB_FN (png_uint_32, png_get_bKGD);
DEF_IMGLIB_FN (void, png_read_update_info);
DEF_IMGLIB_FN (png_byte, png_get_channels);
DEF_IMGLIB_FN (png_size_t, png_get_rowbytes);
DEF_IMGLIB_FN (void, png_read_image);
DEF_IMGLIB_FN (void, png_read_end);
DEF_IMGLIB_FN (void, png_error);
#if (PNG_LIBPNG_VER >= 10500)
DEF_IMGLIB_FN (png_longjmp);
DEF_IMGLIB_FN (png_set_longjmp_fn);
DEF_IMGLIB_FN (void, png_longjmp);
DEF_IMGLIB_FN (jmp_buf *, png_set_longjmp_fn);
#endif /* libpng version >= 1.5 */
static int
@ -5669,13 +5669,10 @@ init_png_functions (Lisp_Object libraries)
#define PNG_LONGJMP(ptr) (longjmp ((ptr)->jmpbuf, 1))
#define PNG_JMPBUF(ptr) ((ptr)->jmpbuf)
#else
/* In libpng version 1.5, the jmpbuf member is hidden.
We need the extra cast for PNG_JMPBUF because, for Windows,
DEF_IMGLIB_FN defines the return value of fn_png_set_longjmp_fn to
be int (Bug#7908). */
/* In libpng version 1.5, the jmpbuf member is hidden. (Bug#7908) */
#define PNG_LONGJMP(ptr) (fn_png_longjmp ((ptr), 1))
#define PNG_JMPBUF(ptr) \
(*(jmp_buf *)(fn_png_set_longjmp_fn((ptr), longjmp, sizeof (jmp_buf))))
(*fn_png_set_longjmp_fn((ptr), longjmp, sizeof (jmp_buf)))
#endif
/* Error and warning handlers installed when the PNG library
@ -5832,11 +5829,10 @@ png_load (f, img)
tbr.bytes += sizeof (sig);
}
/* Initialize read and info structs for PNG lib. Casting return
value avoids a GCC warning on W32. */
png_ptr = (png_structp)fn_png_create_read_struct (PNG_LIBPNG_VER_STRING,
NULL, my_png_error,
my_png_warning);
/* Initialize read and info structs for PNG lib. */
png_ptr = fn_png_create_read_struct (PNG_LIBPNG_VER_STRING,
NULL, my_png_error,
my_png_warning);
if (!png_ptr)
{
if (fp) fclose (fp);
@ -5844,8 +5840,7 @@ png_load (f, img)
return 0;
}
/* Casting return value avoids a GCC warning on W32. */
info_ptr = (png_infop)fn_png_create_info_struct (png_ptr);
info_ptr = fn_png_create_info_struct (png_ptr);
if (!info_ptr)
{
fn_png_destroy_read_struct (&png_ptr, NULL, NULL);
@ -5854,8 +5849,7 @@ png_load (f, img)
return 0;
}
/* Casting return value avoids a GCC warning on W32. */
end_info = (png_infop)fn_png_create_info_struct (png_ptr);
end_info = fn_png_create_info_struct (png_ptr);
if (!end_info)
{
fn_png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
@ -6222,14 +6216,14 @@ jpeg_image_p (object)
#ifdef HAVE_NTGUI
/* JPEG library details. */
DEF_IMGLIB_FN (jpeg_CreateDecompress);
DEF_IMGLIB_FN (jpeg_start_decompress);
DEF_IMGLIB_FN (jpeg_finish_decompress);
DEF_IMGLIB_FN (jpeg_destroy_decompress);
DEF_IMGLIB_FN (jpeg_read_header);
DEF_IMGLIB_FN (jpeg_read_scanlines);
DEF_IMGLIB_FN (jpeg_std_error);
DEF_IMGLIB_FN (jpeg_resync_to_restart);
DEF_IMGLIB_FN (void, jpeg_CreateDecompress);
DEF_IMGLIB_FN (boolean, jpeg_start_decompress);
DEF_IMGLIB_FN (boolean, jpeg_finish_decompress);
DEF_IMGLIB_FN (void, jpeg_destroy_decompress);
DEF_IMGLIB_FN (int, jpeg_read_header);
DEF_IMGLIB_FN (JDIMENSION, jpeg_read_scanlines);
DEF_IMGLIB_FN (struct jpeg_error_mgr *, jpeg_std_error);
DEF_IMGLIB_FN (boolean, jpeg_resync_to_restart);
static int
init_jpeg_functions (Lisp_Object libraries)
@ -6547,9 +6541,8 @@ jpeg_load (f, img)
}
/* Customize libjpeg's error handling to call my_error_exit when an
error is detected. This function will perform a longjmp.
Casting return value avoids a GCC warning on W32. */
cinfo.err = (struct jpeg_error_mgr *)fn_jpeg_std_error (&mgr.pub);
error is detected. This function will perform a longjmp. */
cinfo.err = fn_jpeg_std_error (&mgr.pub);
mgr.pub.error_exit = my_error_exit;
if ((rc = setjmp (mgr.setjmp_buffer)) != 0)
@ -6777,14 +6770,14 @@ tiff_image_p (object)
#ifdef HAVE_NTGUI
/* TIFF library details. */
DEF_IMGLIB_FN (TIFFSetErrorHandler);
DEF_IMGLIB_FN (TIFFSetWarningHandler);
DEF_IMGLIB_FN (TIFFOpen);
DEF_IMGLIB_FN (TIFFClientOpen);
DEF_IMGLIB_FN (TIFFGetField);
DEF_IMGLIB_FN (TIFFReadRGBAImage);
DEF_IMGLIB_FN (TIFFClose);
DEF_IMGLIB_FN (TIFFSetDirectory);
DEF_IMGLIB_FN (TIFFErrorHandler, TIFFSetErrorHandler);
DEF_IMGLIB_FN (TIFFErrorHandler, TIFFSetWarningHandler);
DEF_IMGLIB_FN (TIFF *, TIFFOpen);
DEF_IMGLIB_FN (TIFF *, TIFFClientOpen);
DEF_IMGLIB_FN (int, TIFFGetField);
DEF_IMGLIB_FN (int, TIFFReadRGBAImage);
DEF_IMGLIB_FN (void, TIFFClose);
DEF_IMGLIB_FN (int, TIFFSetDirectory);
static int
init_tiff_functions (Lisp_Object libraries)
@ -6994,9 +6987,8 @@ tiff_load (f, img)
return 0;
}
/* Try to open the image file. Casting return value avoids a
GCC warning on W32. */
tiff = (TIFF *)fn_TIFFOpen (SDATA (file), "r");
/* Try to open the image file. */
tiff = fn_TIFFOpen (SDATA (file), "r");
if (tiff == NULL)
{
image_error ("Cannot open `%s'", file, Qnil);
@ -7011,15 +7003,14 @@ tiff_load (f, img)
memsrc.len = SBYTES (specified_data);
memsrc.index = 0;
/* Casting return value avoids a GCC warning on W32. */
tiff = (TIFF *)fn_TIFFClientOpen ("memory_source", "r", &memsrc,
(TIFFReadWriteProc) tiff_read_from_memory,
(TIFFReadWriteProc) tiff_write_from_memory,
tiff_seek_in_memory,
tiff_close_memory,
tiff_size_of_memory,
tiff_mmap_memory,
tiff_unmap_memory);
tiff = fn_TIFFClientOpen ("memory_source", "r", &memsrc,
(TIFFReadWriteProc) tiff_read_from_memory,
(TIFFReadWriteProc) tiff_write_from_memory,
tiff_seek_in_memory,
tiff_close_memory,
tiff_size_of_memory,
tiff_mmap_memory,
tiff_unmap_memory);
if (!tiff)
{
@ -7257,10 +7248,10 @@ gif_image_p (object)
#ifdef HAVE_NTGUI
/* GIF library details. */
DEF_IMGLIB_FN (DGifCloseFile);
DEF_IMGLIB_FN (DGifSlurp);
DEF_IMGLIB_FN (DGifOpen);
DEF_IMGLIB_FN (DGifOpenFileName);
DEF_IMGLIB_FN (int, DGifCloseFile);
DEF_IMGLIB_FN (int, DGifSlurp);
DEF_IMGLIB_FN (GifFileType *, DGifOpen);
DEF_IMGLIB_FN (GifFileType *, DGifOpenFileName);
static int
init_gif_functions (Lisp_Object libraries)
@ -7358,9 +7349,8 @@ gif_load (f, img)
return 0;
}
/* Open the GIF file. Casting return value avoids a GCC warning
on W32. */
gif = (GifFileType *)fn_DGifOpenFileName (SDATA (file));
/* Open the GIF file. */
gif = fn_DGifOpenFileName (SDATA (file));
if (gif == NULL)
{
image_error ("Cannot open `%s'", file, Qnil);
@ -7376,8 +7366,7 @@ gif_load (f, img)
memsrc.len = SBYTES (specified_data);
memsrc.index = 0;
/* Casting return value avoids a GCC warning on W32. */
gif = (GifFileType *) fn_DGifOpen (&memsrc, gif_read_from_memory);
gif = fn_DGifOpen (&memsrc, gif_read_from_memory);
if (!gif)
{
image_error ("Cannot open memory source `%s'", img->spec, Qnil);
@ -7674,25 +7663,25 @@ svg_image_p (object)
#ifdef HAVE_NTGUI
/* SVG library functions. */
DEF_IMGLIB_FN (rsvg_handle_new);
DEF_IMGLIB_FN (rsvg_handle_get_dimensions);
DEF_IMGLIB_FN (rsvg_handle_write);
DEF_IMGLIB_FN (rsvg_handle_close);
DEF_IMGLIB_FN (rsvg_handle_get_pixbuf);
DEF_IMGLIB_FN (rsvg_handle_free);
DEF_IMGLIB_FN (RsvgHandle *, rsvg_handle_new);
DEF_IMGLIB_FN (void, rsvg_handle_get_dimensions);
DEF_IMGLIB_FN (gboolean, rsvg_handle_write);
DEF_IMGLIB_FN (gboolean, rsvg_handle_close);
DEF_IMGLIB_FN (GdkPixbuf *, rsvg_handle_get_pixbuf);
DEF_IMGLIB_FN (void, rsvg_handle_free);
DEF_IMGLIB_FN (gdk_pixbuf_get_width);
DEF_IMGLIB_FN (gdk_pixbuf_get_height);
DEF_IMGLIB_FN (gdk_pixbuf_get_pixels);
DEF_IMGLIB_FN (gdk_pixbuf_get_rowstride);
DEF_IMGLIB_FN (gdk_pixbuf_get_colorspace);
DEF_IMGLIB_FN (gdk_pixbuf_get_n_channels);
DEF_IMGLIB_FN (gdk_pixbuf_get_has_alpha);
DEF_IMGLIB_FN (gdk_pixbuf_get_bits_per_sample);
DEF_IMGLIB_FN (int, gdk_pixbuf_get_width);
DEF_IMGLIB_FN (int, gdk_pixbuf_get_height);
DEF_IMGLIB_FN (guchar *, gdk_pixbuf_get_pixels);
DEF_IMGLIB_FN (int, gdk_pixbuf_get_rowstride);
DEF_IMGLIB_FN (GdkColorspace, gdk_pixbuf_get_colorspace);
DEF_IMGLIB_FN (int, gdk_pixbuf_get_n_channels);
DEF_IMGLIB_FN (gboolean, gdk_pixbuf_get_has_alpha);
DEF_IMGLIB_FN (int, gdk_pixbuf_get_bits_per_sample);
DEF_IMGLIB_FN (g_type_init);
DEF_IMGLIB_FN (g_object_unref);
DEF_IMGLIB_FN (g_error_free);
DEF_IMGLIB_FN (void, g_type_init);
DEF_IMGLIB_FN (void, g_object_unref);
DEF_IMGLIB_FN (void, g_error_free);
Lisp_Object Qgdk_pixbuf, Qglib, Qgobject;
@ -7846,7 +7835,7 @@ svg_load_image (f, img, contents, size)
gnome type library functions. */
fn_g_type_init ();
/* Make a handle to a new rsvg object. */
rsvg_handle = (RsvgHandle *) fn_rsvg_handle_new ();
rsvg_handle = fn_rsvg_handle_new ();
/* Parse the contents argument and fill in the rsvg_handle. */
fn_rsvg_handle_write (rsvg_handle, contents, size, &error);
@ -7866,14 +7855,14 @@ svg_load_image (f, img, contents, size)
/* We can now get a valid pixel buffer from the svg file, if all
went ok. */
pixbuf = (GdkPixbuf *) fn_rsvg_handle_get_pixbuf (rsvg_handle);
pixbuf = fn_rsvg_handle_get_pixbuf (rsvg_handle);
if (!pixbuf) goto rsvg_error;
fn_g_object_unref (rsvg_handle);
/* Extract some meta data from the svg handle. */
width = fn_gdk_pixbuf_get_width (pixbuf);
height = fn_gdk_pixbuf_get_height (pixbuf);
pixels = (const guint8 *) fn_gdk_pixbuf_get_pixels (pixbuf);
pixels = fn_gdk_pixbuf_get_pixels (pixbuf);
rowstride = fn_gdk_pixbuf_get_rowstride (pixbuf);
/* Validate the svg meta data. */