From df61c79005470fad666b3c3ae257eef1e06bd079 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Sun, 30 Jan 2011 00:56:33 +0100 Subject: [PATCH] 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. --- src/ChangeLog | 7 ++ src/image.c | 197 ++++++++++++++++++++++++-------------------------- 2 files changed, 100 insertions(+), 104 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1d14be1ab70..af76f670e6c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2011-01-29 Andreas Schwab + + * 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 * image.c (fn_png_longjmp, fn_png_set_longjmp_fn): New png diff --git a/src/image.c b/src/image.c index 91b33c45507..b814b795fab 100644 --- a/src/image.c +++ b/src/image.c @@ -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 (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 (g_type_init); -DEF_IMGLIB_FN (g_object_unref); -DEF_IMGLIB_FN (g_error_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 (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 (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. */ -- 2.39.5