From 4441d8b0ad9666b8dc6e51f176551d862f8ff85a Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Wed, 3 Sep 2025 17:04:50 +0100 Subject: [PATCH] x11: Don't include XDestroyImage in the table of exported functions When linking directly to libX11 as a hard dependency, we assign the addresses of functions like XDestroyImage to function pointers like X11_XDestroyImage. However, by default Xutils.h doesn't declare XDestroyImage as a function: it only provides a macro which looks into the XImage struct and calls a function pointer directly, similar to a virtual method. SDL_x11framebuffer.c was already relying on being able to call the macro without explicitly linking to libX11, so do the same here. Fixes: d14cbd7b "Introduce X11 toolkit and make message dialogs use it" Signed-off-by: Simon McVittie --- src/video/x11/SDL_x11sym.h | 1 - src/video/x11/SDL_x11toolkit.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/video/x11/SDL_x11sym.h b/src/video/x11/SDL_x11sym.h index cacec1e654..07f2b4539f 100644 --- a/src/video/x11/SDL_x11sym.h +++ b/src/video/x11/SDL_x11sym.h @@ -105,7 +105,6 @@ SDL_X11_SYM(Status,XInitThreads,(void)) SDL_X11_SYM(int,XPeekEvent,(Display* a,XEvent* b)) SDL_X11_SYM(int,XPending,(Display* a)) SDL_X11_SYM(XImage*,XGetImage,(Display* a,Drawable b,int c, int d,unsigned int e,unsigned int f,unsigned long g,int h)) -SDL_X11_SYM(void,XDestroyImage,(XImage *a)) SDL_X11_SYM(int,XPutImage,(Display* a,Drawable b,GC c,XImage* d,int e,int f,int g,int h,unsigned int i,unsigned int j)) SDL_X11_SYM(int,XQueryKeymap,(Display* a,char b[32])) SDL_X11_SYM(Bool,XQueryPointer,(Display* a,Window b,Window* c,Window* d,int* e,int* f,int* g,int* h,unsigned int* i)) diff --git a/src/video/x11/SDL_x11toolkit.c b/src/video/x11/SDL_x11toolkit.c index 71d1b19def..1e1d50e663 100644 --- a/src/video/x11/SDL_x11toolkit.c +++ b/src/video/x11/SDL_x11toolkit.c @@ -981,10 +981,10 @@ static void X11Toolkit_DrawWindow(SDL_ToolkitWindowX11 *data) { put_image = X11_XCreateImage(data->display, data->visual, data->vi.depth, ZPixmap, 0, put_surface->pixels, data->window_width, data->window_height, 32, put_surface->pitch); X11_XPutImage(data->display, data->window, data->ctx, put_image, 0, 0, 0, 0, data->window_width, data->window_height); - X11_XDestroyImage(pixmap_image); + XDestroyImage(pixmap_image); /* Needed because XDestroyImage results in a double-free otherwise */ put_image->data = NULL; - X11_XDestroyImage(put_image); + XDestroyImage(put_image); SDL_DestroySurface(pixmap_surface); SDL_DestroySurface(put_surface); }