From 68f5512ee704da7dea035fee32a30f68bf6c17a3 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sat, 12 Apr 2025 14:31:54 +0200 Subject: [BOX32][WRAPPER] Fixed 32bits wrapping for XRenderQueryFilters function --- src/libtools/my_x11_conv.c | 32 ++++++++++++++++++++++++++++++++ src/libtools/my_x11_conv.h | 3 +++ src/libtools/my_x11_defs.h | 7 +++++++ src/libtools/my_x11_defs_32.h | 7 +++++++ 4 files changed, 49 insertions(+) (limited to 'src/libtools') diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c index eb1dadbd..816f9b9b 100644 --- a/src/libtools/my_x11_conv.c +++ b/src/libtools/my_x11_conv.c @@ -1407,3 +1407,35 @@ void* inplace_XDeviceInfo_enlarge(void* a) } return a; } + + +void* inplace_XFilters_shrink(void* a) +{ + if(a) { + my_XFilters_t* src = a; + my_XFilters_32_t* dst = a; + dst->nfilter = src->nfilter; + char** filter = src->filter; + dst->filter = to_ptrv(filter); + dst->nalias = src->nalias; + dst->alias = to_ptrv(src->alias); + for(int i=0; infilter; ++i) + ((ptr_t*)(filter))[i] = to_ptrv(filter[i]); + } + return a; +} +void* inplace_XFilters_enlarge(void* a) +{ + if(a) { + my_XFilters_t* dst = a; + my_XFilters_32_t* src = a; + dst->alias = from_ptrv(src->alias); + dst->nalias = src->nalias; + dst->filter = from_ptrv(src->filter); + dst->nfilter = src->nfilter; + char** filter = dst->filter; + for(int i=dst->nfilter-1; i>=0; --i) + filter[i] = from_ptrv(((ptr_t*)(filter))[i]); + } + return a; +} diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h index ed5b5523..01596f78 100644 --- a/src/libtools/my_x11_conv.h +++ b/src/libtools/my_x11_conv.h @@ -113,4 +113,7 @@ void* inplace_XAnyClassInfo_enlarge(void* a); void* inplace_XDeviceInfo_shrink(void* a, int n); void* inplace_XDeviceInfo_enlarge(void* a); +void* inplace_XFilters_shrink(void* a); +void* inplace_XFilters_enlarge(void* a); + #endif//MY_X11_CONV \ No newline at end of file diff --git a/src/libtools/my_x11_defs.h b/src/libtools/my_x11_defs.h index 0cf6081d..b2b64dad 100644 --- a/src/libtools/my_x11_defs.h +++ b/src/libtools/my_x11_defs.h @@ -1465,4 +1465,11 @@ typedef struct my_XFixesCursorImage_s { void* name; /* Version >= 2 only */ } my_XFixesCursorImage_t; +typedef struct my_XFilters_s { + int nfilter; + char **filter; + int nalias; + short *alias; +} my_XFilters_t; + #endif//MY_X11_DEFS \ No newline at end of file diff --git a/src/libtools/my_x11_defs_32.h b/src/libtools/my_x11_defs_32.h index 01144d1f..5d596485 100644 --- a/src/libtools/my_x11_defs_32.h +++ b/src/libtools/my_x11_defs_32.h @@ -1407,4 +1407,11 @@ typedef struct my_XFixesCursorImage_32_s { ptr_t name; /* Version >= 2 only */ } my_XFixesCursorImage_32_t; +typedef struct my_XFilters_32_s { + int nfilter; + ptr_t filter; //char ** + int nalias; + ptr_t alias; //short * +} my_XFilters_32_t; + #endif//MY_X11_DEFS_32 \ No newline at end of file -- cgit 1.4.1