diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2026-05-27 08:37:01 -0700 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2026-05-27 08:37:39 -0700 |
| commit | 54b6ea14a928d015098c41f88aff126df169fecc (patch) | |
| tree | 7eb95f00b443e464f0199718bc9f85e2486e249c | |
| parent | 967d8182cfa2d6c845853210e4fd4ab398efe069 (diff) | |
Port MinGW GCC 9.2 image.c fix to non MS-Windows
Avoid useless casts on GCC 14+ platforms on non MS-Windows, by
using a cast only if HAVE_NTGUI. That cast should not provoke
-Wuseless-cast regardless of how MS-Windows defines HDC, since it
casts to an Emacs-defined type. This change lets the code compile
again on Fedora 44 with --enable-gcc-warnings.
* src/dispextern.h (PIX_CONTAINER_TO_CONTEXT): New macro.
It defaults to the identity macro.
(Emacs_Pix_Context): Default to Emacs_Pix_Container.
* src/image.c (pbm_load, png_load_body, jpeg_load_body)
(tiff_load, gif_load, svg_load_image): Use the new macro
instead of a cast.
| -rw-r--r-- | src/dispextern.h | 14 | ||||
| -rw-r--r-- | src/image.c | 14 |
2 files changed, 16 insertions, 12 deletions
diff --git a/src/dispextern.h b/src/dispextern.h index 4071ca57f72..129c94f0dd6 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -115,7 +115,6 @@ xstrcasecmp (char const *a, char const *b) typedef struct x_display_info Display_Info; #ifndef USE_CAIRO typedef XImage *Emacs_Pix_Container; -typedef XImage *Emacs_Pix_Context; #endif /* !USE_CAIRO */ #define NativeRectangle XRectangle #endif @@ -130,7 +129,6 @@ typedef struct int bits_per_pixel; /* bits per pixel (ZPixmap) */ } *Emacs_Pix_Container; typedef Emacs_Pix_Container Emacs_Pixmap; -typedef Emacs_Pix_Container Emacs_Pix_Context; #endif #ifdef HAVE_NTGUI @@ -138,6 +136,7 @@ typedef Emacs_Pix_Container Emacs_Pix_Context; typedef struct w32_display_info Display_Info; typedef XImage *Emacs_Pix_Container; typedef HDC Emacs_Pix_Context; +# define PIX_CONTAINER_TO_CONTEXT(c) ((Emacs_Pix_Context) (c)) #endif #ifdef HAVE_NS @@ -145,7 +144,6 @@ typedef HDC Emacs_Pix_Context; /* Following typedef needed to accommodate the MSDOS port, believe it or not. */ typedef struct ns_display_info Display_Info; typedef Emacs_Pixmap Emacs_Pix_Container; -typedef Emacs_Pixmap Emacs_Pix_Context; #endif #ifdef HAVE_PGTK @@ -160,14 +158,12 @@ typedef XImagePtr XImagePtr_or_DC; #include "haikugui.h" typedef struct haiku_display_info Display_Info; typedef Emacs_Pixmap Emacs_Pix_Container; -typedef Emacs_Pixmap Emacs_Pix_Context; #endif #ifdef HAVE_ANDROID #include "androidgui.h" typedef struct android_display_info Display_Info; typedef struct android_image *Emacs_Pix_Container; -typedef struct android_image *Emacs_Pix_Context; #endif #ifdef HAVE_WINDOW_SYSTEM @@ -193,6 +189,14 @@ typedef void *Emacs_Cursor; # define WINDOW_HANDLE_UINTPTR(h) ((uintptr_t) {(h)}) # endif +/* Ordinarily an Emacs_Pix_Context is just an Emacs_Pix_Container; + platforms can override this by defining the latter type + and defining the conversion macro PIX_CONTAINER_TO_CONTEXT. */ +# ifndef PIX_CONTAINER_TO_CONTEXT +typedef Emacs_Pix_Container Emacs_Pix_Context; +# define PIX_CONTAINER_TO_CONTEXT(c) (c) +# endif + /* ``box'' structure similar to that found in the X sample server, meaning that X2 and Y2 are not actually the end of the box, but one pixel past the end of the box, which makes checking for overlaps diff --git a/src/image.c b/src/image.c index 4d6affaf849..9724094f81c 100644 --- a/src/image.c +++ b/src/image.c @@ -7841,7 +7841,7 @@ pbm_load (struct frame *f, struct image *img) if (NILP (image_spec_value (img->spec, QCbackground, NULL))) /* Casting avoids a GCC warning. */ - IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg); + IMAGE_BACKGROUND (img, f, PIX_CONTAINER_TO_CONTEXT (ximg)); /* Put ximg into the image. */ image_put_x_image (f, img, ximg, 0); @@ -8587,7 +8587,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c) img->height = height; /* Maybe fill in the background field while we have ximg handy. */ - IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg); + IMAGE_BACKGROUND (img, f, PIX_CONTAINER_TO_CONTEXT (ximg)); /* Put ximg into the image. */ image_put_x_image (f, img, ximg, 0); @@ -8597,7 +8597,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c) { /* Fill in the background_transparent field while we have the mask handy. Casting avoids a GCC warning. */ - image_background_transparent (img, f, (Emacs_Pix_Context)mask_img); + image_background_transparent (img, f, PIX_CONTAINER_TO_CONTEXT (mask_img)); image_put_x_image (f, img, mask_img, 1); } @@ -9164,7 +9164,7 @@ jpeg_load_body (struct frame *f, struct image *img, /* Maybe fill in the background field while we have ximg handy. */ if (NILP (image_spec_value (img->spec, QCbackground, NULL))) - IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg); + IMAGE_BACKGROUND (img, f, PIX_CONTAINER_TO_CONTEXT (ximg)); /* Put ximg into the image. */ image_put_x_image (f, img, ximg, 0); @@ -9604,7 +9604,7 @@ tiff_load (struct frame *f, struct image *img) /* Maybe fill in the background field while we have ximg handy. */ if (NILP (image_spec_value (img->spec, QCbackground, NULL))) - IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg); + IMAGE_BACKGROUND (img, f, PIX_CONTAINER_TO_CONTEXT (ximg)); /* Put ximg into the image. */ image_put_x_image (f, img, ximg, 0); @@ -10326,7 +10326,7 @@ gif_load (struct frame *f, struct image *img) /* Maybe fill in the background field while we have ximg handy. */ if (NILP (image_spec_value (img->spec, QCbackground, NULL))) - IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg); + IMAGE_BACKGROUND (img, f, PIX_CONTAINER_TO_CONTEXT (ximg)); /* Put ximg into the image. */ image_put_x_image (f, img, ximg, 0); @@ -12510,7 +12510,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents, /* Maybe fill in the background field while we have ximg handy. Casting avoids a GCC warning. */ - IMAGE_BACKGROUND (img, f, (Emacs_Pix_Context)ximg); + IMAGE_BACKGROUND (img, f, PIX_CONTAINER_TO_CONTEXT (ximg)); /* Put ximg into the image. */ image_put_x_image (f, img, ximg, 0); |
