[PATCH v4 0/6] MR1520: comctl32: Use CRT allocation functions.
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> -- v4: comctl32/listview: Use CRT allocation functions. comctl32/button: Use CRT allocation functions. https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/header.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c index be4c5616bb7..e905d18e2fa 100644 --- a/dlls/comctl32/header.c +++ b/dlls/comctl32/header.c @@ -41,7 +41,6 @@ #include "vssym32.h" #include "uxtheme.h" #include "wine/debug.h" -#include "wine/heap.h" WINE_DEFAULT_DEBUG_CHANNEL(header); @@ -141,7 +140,7 @@ static void HEADER_StoreHDItemInHeader(HEADER_ITEM *lpItem, UINT mask, const HDI if (mask & HDI_TEXT) { - heap_free(lpItem->pszText); + free(lpItem->pszText); lpItem->pszText = NULL; if (phdi->pszText != LPSTR_TEXTCALLBACKW) /* covers != TEXTCALLBACKA too */ @@ -336,7 +335,7 @@ static HRGN create_sort_arrow( INT x, INT y, INT h, BOOL is_up ) if (size > sizeof(buffer)) { - data = heap_alloc( size ); + data = malloc( size ); if (!data) return NULL; } data->rdh.dwSize = sizeof(data->rdh); @@ -362,7 +361,7 @@ static HRGN create_sort_arrow( INT x, INT y, INT h, BOOL is_up ) data->rdh.nCount++; } rgn = ExtCreateRegion( NULL, size, data ); - if (data != (RGNDATA *)buffer) heap_free( data ); + if (data != (RGNDATA *)buffer) free( data ); return rgn; } @@ -983,7 +982,7 @@ HEADER_PrepareCallbackItems(const HEADER_INFO *infoPtr, INT iItem, INT reqMask) if (mask&HDI_TEXT && lpItem->pszText != NULL) { ERR("(): function called without a call to FreeCallbackItems\n"); - heap_free(lpItem->pszText); + free(lpItem->pszText); lpItem->pszText = NULL; } @@ -994,13 +993,13 @@ HEADER_PrepareCallbackItems(const HEADER_INFO *infoPtr, INT iItem, INT reqMask) { dispInfo.hdr.code = HDN_GETDISPINFOW; if (mask & HDI_TEXT) - pvBuffer = heap_alloc_zero(MAX_HEADER_TEXT_LEN * sizeof(WCHAR)); + pvBuffer = calloc(MAX_HEADER_TEXT_LEN, sizeof(WCHAR)); } else { dispInfo.hdr.code = HDN_GETDISPINFOA; if (mask & HDI_TEXT) - pvBuffer = heap_alloc_zero(MAX_HEADER_TEXT_LEN * sizeof(CHAR)); + pvBuffer = calloc(MAX_HEADER_TEXT_LEN, sizeof(CHAR)); } dispInfo.pszText = pvBuffer; dispInfo.cchTextMax = (pvBuffer!=NULL?MAX_HEADER_TEXT_LEN:0); @@ -1031,7 +1030,7 @@ HEADER_PrepareCallbackItems(const HEADER_INFO *infoPtr, INT iItem, INT reqMask) else { Str_SetPtrAtoW(&lpItem->pszText, (LPSTR)dispInfo.pszText); - heap_free(pvBuffer); + free(pvBuffer); } } @@ -1057,7 +1056,7 @@ HEADER_FreeCallbackItems(HEADER_ITEM *lpItem) { if (lpItem->callbackMask&HDI_TEXT) { - heap_free(lpItem->pszText); + free(lpItem->pszText); lpItem->pszText = NULL; } @@ -1179,15 +1178,15 @@ HEADER_DeleteItem (HEADER_INFO *infoPtr, INT iItem) TRACE("%d: order=%d, iOrder=%d, ->iOrder=%d\n", i, infoPtr->order[i], infoPtr->items[i].iOrder, infoPtr->items[infoPtr->order[i]].iOrder); iOrder = infoPtr->items[iItem].iOrder; - heap_free(infoPtr->items[iItem].pszText); + free(infoPtr->items[iItem].pszText); infoPtr->uNumItem--; memmove(&infoPtr->items[iItem], &infoPtr->items[iItem + 1], (infoPtr->uNumItem - iItem) * sizeof(HEADER_ITEM)); memmove(&infoPtr->order[iOrder], &infoPtr->order[iOrder + 1], (infoPtr->uNumItem - iOrder) * sizeof(INT)); - infoPtr->items = heap_realloc(infoPtr->items, sizeof(HEADER_ITEM) * infoPtr->uNumItem); - infoPtr->order = heap_realloc(infoPtr->order, sizeof(INT) * infoPtr->uNumItem); + infoPtr->items = realloc(infoPtr->items, sizeof(HEADER_ITEM) * infoPtr->uNumItem); + infoPtr->order = realloc(infoPtr->order, sizeof(INT) * infoPtr->uNumItem); /* Correct the orders */ for (i = 0; i < infoPtr->uNumItem; i++) @@ -1417,8 +1416,8 @@ HEADER_InsertItemT (HEADER_INFO *infoPtr, INT nItem, const HDITEMW *phdi, BOOL b iOrder = infoPtr->uNumItem; infoPtr->uNumItem++; - infoPtr->items = heap_realloc(infoPtr->items, sizeof(HEADER_ITEM) * infoPtr->uNumItem); - infoPtr->order = heap_realloc(infoPtr->order, sizeof(INT) * infoPtr->uNumItem); + infoPtr->items = realloc(infoPtr->items, sizeof(HEADER_ITEM) * infoPtr->uNumItem); + infoPtr->order = realloc(infoPtr->order, sizeof(INT) * infoPtr->uNumItem); /* make space for the new item */ memmove(&infoPtr->items[nItem + 1], &infoPtr->items[nItem], @@ -1537,7 +1536,7 @@ HEADER_SetItemT (HEADER_INFO *infoPtr, INT nItem, const HDITEMW *phdi, BOOL bUni HEADER_CopyHDItemForNotify(infoPtr, &hdNotify, phdi, bUnicode, &pvScratch); if (HEADER_SendNotifyWithHDItemT(infoPtr, HDN_ITEMCHANGINGW, nItem, &hdNotify)) { - heap_free(pvScratch); + free(pvScratch); return FALSE; } @@ -1554,7 +1553,7 @@ HEADER_SetItemT (HEADER_INFO *infoPtr, INT nItem, const HDITEMW *phdi, BOOL bUni InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); - heap_free(pvScratch); + free(pvScratch); return TRUE; } @@ -1577,7 +1576,7 @@ HEADER_Create (HWND hwnd, const CREATESTRUCTW *lpcs) HFONT hOldFont; HDC hdc; - infoPtr = heap_alloc_zero (sizeof(*infoPtr)); + infoPtr = calloc(1, sizeof(*infoPtr)); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr); infoPtr->hwndSelf = hwnd; @@ -1632,14 +1631,14 @@ HEADER_NCDestroy (HEADER_INFO *infoPtr) if (infoPtr->items) { lpItem = infoPtr->items; for (nItem = 0; nItem < infoPtr->uNumItem; nItem++, lpItem++) - heap_free(lpItem->pszText); - heap_free(infoPtr->items); + free(lpItem->pszText); + free(infoPtr->items); } - heap_free(infoPtr->order); + free(infoPtr->order); SetWindowLongPtrW (infoPtr->hwndSelf, 0, 0); - heap_free(infoPtr); + free(infoPtr); return 0; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/monthcal.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c index 4fc984f6f4b..ea220136182 100644 --- a/dlls/comctl32/monthcal.c +++ b/dlls/comctl32/monthcal.c @@ -46,7 +46,6 @@ #include "uxtheme.h" #include "vssym32.h" #include "wine/debug.h" -#include "wine/heap.h" WINE_DEFAULT_DEBUG_CHANNEL(monthcal); @@ -1946,7 +1945,7 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr) nmds.nmhdr.idFrom = GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID); nmds.nmhdr.code = MCN_GETDAYSTATE; nmds.cDayState = MONTHCAL_GetMonthRange(infoPtr, GMR_DAYSTATE, 0); - nmds.prgDayState = state = heap_alloc_zero(nmds.cDayState * sizeof(MONTHDAYSTATE)); + nmds.prgDayState = state = calloc(nmds.cDayState, sizeof(MONTHDAYSTATE)); MONTHCAL_GetMinDate(infoPtr, &nmds.stStart); nmds.stStart.wDay = 1; @@ -1955,7 +1954,7 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr) memcpy(infoPtr->monthdayState, nmds.prgDayState, MONTHCAL_GetMonthRange(infoPtr, GMR_DAYSTATE, 0)*sizeof(MONTHDAYSTATE)); - heap_free(state); + free(state); } /* no valid range check performed */ @@ -2593,9 +2592,9 @@ static void MONTHCAL_UpdateSize(MONTHCAL_INFO *infoPtr) { infoPtr->dim.cx = x; infoPtr->dim.cy = y; - infoPtr->calendars = heap_realloc(infoPtr->calendars, MONTHCAL_GetCalCount(infoPtr)*sizeof(CALENDAR_INFO)); + infoPtr->calendars = realloc(infoPtr->calendars, MONTHCAL_GetCalCount(infoPtr)*sizeof(CALENDAR_INFO)); - infoPtr->monthdayState = heap_realloc(infoPtr->monthdayState, + infoPtr->monthdayState = realloc(infoPtr->monthdayState, MONTHCAL_GetMonthRange(infoPtr, GMR_DAYSTATE, 0)*sizeof(MONTHDAYSTATE)); MONTHCAL_NotifyDayState(infoPtr); @@ -2750,7 +2749,7 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) MONTHCAL_INFO *infoPtr; /* allocate memory for info structure */ - infoPtr = heap_alloc_zero(sizeof(*infoPtr)); + infoPtr = calloc(1, sizeof(*infoPtr)); SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr); if (infoPtr == NULL) { @@ -2762,9 +2761,9 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) infoPtr->hwndNotify = lpcs->hwndParent; infoPtr->dwStyle = GetWindowLongW(hwnd, GWL_STYLE); infoPtr->dim.cx = infoPtr->dim.cy = 1; - infoPtr->calendars = heap_alloc_zero(sizeof(CALENDAR_INFO)); + infoPtr->calendars = calloc(1, sizeof(*infoPtr->calendars)); if (!infoPtr->calendars) goto fail; - infoPtr->monthdayState = heap_alloc_zero(3 * sizeof(MONTHDAYSTATE)); + infoPtr->monthdayState = calloc(3, sizeof(*infoPtr->monthdayState)); if (!infoPtr->monthdayState) goto fail; /* initialize info structure */ @@ -2805,9 +2804,9 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) return 0; fail: - heap_free(infoPtr->monthdayState); - heap_free(infoPtr->calendars); - heap_free(infoPtr); + free(infoPtr->monthdayState); + free(infoPtr->calendars); + free(infoPtr); return 0; } @@ -2816,9 +2815,8 @@ MONTHCAL_Destroy(MONTHCAL_INFO *infoPtr) { INT i; - /* free month calendar info data */ - heap_free(infoPtr->monthdayState); - heap_free(infoPtr->calendars); + free(infoPtr->monthdayState); + free(infoPtr->calendars); SetWindowLongPtrW(infoPtr->hwndSelf, 0, 0); CloseThemeData (GetWindowTheme (infoPtr->hwndSelf)); @@ -2826,7 +2824,7 @@ MONTHCAL_Destroy(MONTHCAL_INFO *infoPtr) for (i = 0; i < BrushLast; i++) DeleteObject(infoPtr->brushes[i]); for (i = 0; i < PenLast; i++) DeleteObject(infoPtr->pens[i]); - heap_free(infoPtr); + free(infoPtr); return 0; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/static.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dlls/comctl32/static.c b/dlls/comctl32/static.c index 25eee289204..cab0235b8d3 100644 --- a/dlls/comctl32/static.c +++ b/dlls/comctl32/static.c @@ -29,6 +29,7 @@ */ #include <stdarg.h> +#include <stdlib.h> #include "windef.h" #include "winbase.h" @@ -37,7 +38,6 @@ #include "commctrl.h" #include "uxtheme.h" -#include "wine/heap.h" #include "wine/debug.h" #include "comctl32.h" @@ -94,7 +94,7 @@ static struct static_extra_info *get_extra_ptr( HWND hwnd, BOOL force ) struct static_extra_info *extra = (struct static_extra_info *)GetWindowLongPtrW( hwnd, 0 ); if (!extra && force) { - extra = heap_alloc_zero( sizeof(*extra) ); + extra = calloc( 1, sizeof(*extra) ); if (extra) SetWindowLongPtrW( hwnd, 0, (ULONG_PTR)extra ); } @@ -470,7 +470,7 @@ static LRESULT CALLBACK STATIC_WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, { if (extra->image_has_alpha) DeleteObject( extra->image.hbitmap ); - heap_free( extra ); + free( extra ); } /* * FIXME @@ -751,13 +751,13 @@ static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD style ) } buf_size = 256; - if (!(text = HeapAlloc( GetProcessHeap(), 0, buf_size * sizeof(WCHAR) ))) + if (!(text = malloc( buf_size * sizeof(WCHAR) ))) goto no_TextOut; while ((len = InternalGetWindowText( hwnd, text, buf_size )) == buf_size - 1) { buf_size *= 2; - if (!(text = HeapReAlloc( GetProcessHeap(), 0, text, buf_size * sizeof(WCHAR) ))) + if (!(text = realloc( text, buf_size * sizeof(WCHAR) ))) goto no_TextOut; } @@ -777,7 +777,7 @@ static void STATIC_PaintTextfn( HWND hwnd, HDC hdc, HBRUSH hbrush, DWORD style ) } no_TextOut: - HeapFree( GetProcessHeap(), 0, text ); + free( text ); if (hFont) SelectObject( hdc, hOldFont ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/imagelist.c | 58 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index 22d8d8c40e0..eddb282227f 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -45,7 +45,6 @@ #include "commoncontrols.h" #include "wine/debug.h" #include "wine/exception.h" -#include "wine/heap.h" WINE_DEFAULT_DEBUG_CHANNEL(imagelist); @@ -269,7 +268,7 @@ static BOOL add_with_alpha( HIMAGELIST himl, HDC hdc, int pos, int count, SelectObject( hdc, hbmImage ); mask_width = (bm.bmWidth + 31) / 32 * 4; - if (!(info = heap_alloc( FIELD_OFFSET( BITMAPINFO, bmiColors[256] )))) goto done; + if (!(info = malloc( FIELD_OFFSET( BITMAPINFO, bmiColors[256] )))) goto done; info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); info->bmiHeader.biWidth = bm.bmWidth; info->bmiHeader.biHeight = -height; @@ -281,17 +280,17 @@ static BOOL add_with_alpha( HIMAGELIST himl, HDC hdc, int pos, int count, info->bmiHeader.biYPelsPerMeter = 0; info->bmiHeader.biClrUsed = 0; info->bmiHeader.biClrImportant = 0; - if (!(bits = heap_alloc( info->bmiHeader.biSizeImage ))) goto done; + if (!(bits = malloc( info->bmiHeader.biSizeImage ))) goto done; if (!GetDIBits( hdc, hbmImage, 0, height, bits, info, DIB_RGB_COLORS )) goto done; if (hbmMask) { - if (!(mask_info = heap_alloc( FIELD_OFFSET( BITMAPINFO, bmiColors[2] )))) + if (!(mask_info = malloc( FIELD_OFFSET( BITMAPINFO, bmiColors[2] )))) goto done; mask_info->bmiHeader = info->bmiHeader; mask_info->bmiHeader.biBitCount = 1; mask_info->bmiHeader.biSizeImage = mask_width * height; - if (!(mask_bits = heap_alloc_zero( mask_info->bmiHeader.biSizeImage ))) + if (!(mask_bits = calloc( 1, mask_info->bmiHeader.biSizeImage ))) goto done; if (!GetDIBits( hdc, hbmMask, 0, height, mask_bits, mask_info, DIB_RGB_COLORS )) goto done; } @@ -300,10 +299,10 @@ static BOOL add_with_alpha( HIMAGELIST himl, HDC hdc, int pos, int count, ret = TRUE; done: - heap_free( info ); - heap_free( mask_info ); - heap_free( bits ); - heap_free( mask_bits ); + free( info ); + free( mask_info ); + free( bits ); + free( mask_bits ); return ret; } @@ -380,8 +379,8 @@ IMAGELIST_InternalExpandBitmaps(HIMAGELIST himl, INT nImageCount) himl->hbmMask = hbmNewBitmap; } - himl->item_flags = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, himl->item_flags, - nNewCount * sizeof(*himl->item_flags)); + himl->item_flags = realloc(himl->item_flags, nNewCount * sizeof(*himl->item_flags)); + memset( himl->item_flags + himl->cMaxImage, 0, (nNewCount - himl->cMaxImage) * sizeof(*himl->item_flags) ); himl->cMaxImage = nNewCount; DeleteDC (hdcBitmap); @@ -848,7 +847,7 @@ ImageList_Create (INT cx, INT cy, UINT flags, else himl->hbmMask = 0; - himl->item_flags = heap_alloc_zero( himl->cMaxImage * sizeof(*himl->item_flags) ); + himl->item_flags = calloc( himl->cMaxImage, sizeof(*himl->item_flags) ); /* create blending brushes */ hbmTemp = CreateBitmap (8, 8, 1, 1, aBitBlend25); @@ -1260,7 +1259,7 @@ static BOOL alpha_blend_image( HIMAGELIST himl, HDC dest_dc, int dest_x, int des func.AlphaFormat = AC_SRC_ALPHA; if (!(hdc = CreateCompatibleDC( 0 ))) return FALSE; - if (!(info = heap_alloc( FIELD_OFFSET( BITMAPINFO, bmiColors[256] )))) goto done; + if (!(info = malloc( FIELD_OFFSET( BITMAPINFO, bmiColors[256] )))) goto done; info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); info->bmiHeader.biWidth = cx; info->bmiHeader.biHeight = cy; @@ -1371,7 +1370,7 @@ done: DeleteDC( hdc ); if (bmp) DeleteObject( bmp ); if (mask) DeleteObject( mask ); - heap_free( info ); + free( info ); return ret; } @@ -1981,11 +1980,11 @@ ImageList_LoadImageA (HINSTANCE hi, LPCSTR lpbmp, INT cx, INT cGrow, uType, uFlags); len = MultiByteToWideChar(CP_ACP, 0, lpbmp, -1, NULL, 0); - lpbmpW = heap_alloc(len * sizeof(WCHAR)); + lpbmpW = malloc(len * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, lpbmp, -1, lpbmpW, len); himl = ImageList_LoadImageW(hi, lpbmpW, cx, cGrow, clrMask, uType, uFlags); - heap_free (lpbmpW); + free (lpbmpW); return himl; } @@ -2226,12 +2225,12 @@ static void *read_bitmap(IStream *pstm, BITMAPINFO *bmi) if (palspace && FAILED(IStream_Read(pstm, bmi->bmiColors, palspace, NULL))) return NULL; - bits = heap_alloc_zero(bmi->bmiHeader.biSizeImage); + bits = calloc(1, bmi->bmiHeader.biSizeImage); if (!bits) return NULL; if (FAILED(IStream_Read(pstm, bits, bmi->bmiHeader.biSizeImage, NULL))) { - heap_free(bits); + free(bits); return NULL; } return bits; @@ -2343,8 +2342,8 @@ HIMAGELIST WINAPI ImageList_Read(IStream *pstm) 0, 0, mask_info->bmiHeader.biWidth, mask_info->bmiHeader.biHeight, mask_bits, mask_info, DIB_RGB_COLORS, SRCCOPY); } - heap_free( image_bits ); - heap_free( mask_bits ); + free( image_bits ); + free( mask_bits ); himl->cCurImage = ilHead.cCurImage; himl->cMaxImage = ilHead.cMaxImage; @@ -2406,8 +2405,8 @@ ImageList_Remove (HIMAGELIST himl, INT i) for (nCount = 0; nCount < MAX_OVERLAYIMAGE; nCount++) himl->nOvlIdx[nCount] = -1; - heap_free( himl->item_flags ); - himl->item_flags = heap_alloc_zero( himl->cMaxImage * sizeof(*himl->item_flags) ); + free( himl->item_flags ); + himl->item_flags = calloc( himl->cMaxImage, sizeof(*himl->item_flags) ); hbmNewImage = ImageList_CreateImage(himl->hdcImage, himl, himl->cMaxImage); SelectObject (himl->hdcImage, hbmNewImage); @@ -2947,8 +2946,9 @@ ImageList_SetImageCount (HIMAGELIST himl, UINT iImageCount) DeleteDC (hdcBitmap); - himl->item_flags = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, himl->item_flags, - nNewCount * sizeof(*himl->item_flags)); + himl->item_flags = realloc( himl->item_flags, nNewCount * sizeof(*himl->item_flags)); + if (nNewCount > himl->cMaxImage) + memset( himl->item_flags + himl->cMaxImage, 0, (nNewCount - himl->cMaxImage) * sizeof(*himl->item_flags) ); /* Update max image count and current image count */ himl->cMaxImage = nNewCount; @@ -3013,7 +3013,7 @@ static BOOL _write_bitmap(HBITMAP hBitmap, IStream *pstm) offBits = totalSize; totalSize += sizeImage; - data = heap_alloc_zero(totalSize); + data = calloc(1, totalSize); bmfh = (LPBITMAPFILEHEADER)data; bmih = (LPBITMAPINFOHEADER)(data + sizeof(BITMAPFILEHEADER)); lpBits = data + offBits; @@ -3054,7 +3054,7 @@ static BOOL _write_bitmap(HBITMAP hBitmap, IStream *pstm) result = TRUE; failed: - heap_free(data); + free(data); return result; } @@ -3299,8 +3299,8 @@ static ULONG WINAPI ImageListImpl_Release(IImageList2 *iface) if (This->hbrBlend50) DeleteObject (This->hbrBlend50); This->IImageList2_iface.lpVtbl = NULL; - heap_free(This->item_flags); - heap_free(This); + free(This->item_flags); + free(This); } return ref; @@ -3834,7 +3834,7 @@ static HRESULT ImageListImpl_CreateInstance(const IUnknown *pUnkOuter, REFIID ii if (pUnkOuter) return CLASS_E_NOAGGREGATION; - This = heap_alloc_zero(sizeof(struct _IMAGELIST)); + This = calloc(1, sizeof(struct _IMAGELIST)); if (!This) return E_OUTOFMEMORY; This->IImageList2_iface.lpVtbl = &ImageListImpl_Vtbl; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/button.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c index 6c04c458a6a..d4196b144ed 100644 --- a/dlls/comctl32/button.c +++ b/dlls/comctl32/button.c @@ -55,7 +55,6 @@ #include "uxtheme.h" #include "vssym32.h" #include "wine/debug.h" -#include "wine/heap.h" #include "comctl32.h" @@ -255,7 +254,7 @@ static inline void paint_button( BUTTON_INFO *infoPtr, LONG style, UINT action ) static inline WCHAR *get_button_text( const BUTTON_INFO *infoPtr ) { INT len = GetWindowTextLengthW( infoPtr->hwnd ); - WCHAR *buffer = heap_alloc( (len + 1) * sizeof(WCHAR) ); + WCHAR *buffer = malloc( (len + 1) * sizeof(WCHAR) ); if (buffer) GetWindowTextW( infoPtr->hwnd, buffer, len + 1 ); return buffer; @@ -335,7 +334,7 @@ HRGN set_control_clipping( HDC hdc, const RECT *rect ) static WCHAR *heap_strndupW(const WCHAR *src, size_t length) { size_t size = (length + 1) * sizeof(WCHAR); - WCHAR *dst = heap_alloc(size); + WCHAR *dst = malloc(size); if (dst) memcpy(dst, src, size); return dst; } @@ -504,7 +503,7 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L { CREATESTRUCTW *cs = (CREATESTRUCTW *)lParam; - infoPtr = heap_alloc_zero( sizeof(*infoPtr) ); + infoPtr = calloc( 1, sizeof(*infoPtr) ); SetWindowLongPtrW( hWnd, 0, (LONG_PTR)infoPtr ); infoPtr->hwnd = hWnd; infoPtr->parent = cs->hwndParent; @@ -521,8 +520,8 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L DeleteObject(infoPtr->u.bitmap); else if (infoPtr->image_type == IMAGE_ICON) DestroyIcon(infoPtr->u.icon); - heap_free(infoPtr->note); - heap_free(infoPtr); + free(infoPtr->note); + free(infoPtr); break; case WM_CREATE: @@ -782,7 +781,7 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L return FALSE; } - heap_free(infoPtr->note); + free(infoPtr->note); if (note) { infoPtr->note_length = lstrlenW(note); @@ -792,7 +791,7 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L if (!note || !infoPtr->note) { infoPtr->note_length = 0; - infoPtr->note = heap_alloc_zero(sizeof(WCHAR)); + infoPtr->note = calloc(1, sizeof(WCHAR)); } SetLastError(NO_ERROR); @@ -1289,7 +1288,7 @@ static void BUTTON_GetTextIdealSize(BUTTON_INFO *infoPtr, LONG maxWidth, SIZE *s hdc = GetDC(infoPtr->hwnd); rect = BUTTON_GetTextRect(infoPtr, hdc, text, maxWidth); ReleaseDC(infoPtr->hwnd, hdc); - heap_free(text); + free(text); size->cx = rect.right - rect.left + margin->left + margin->right; size->cy = rect.bottom - rect.top + margin->top + margin->bottom; @@ -1489,7 +1488,7 @@ static BOOL CL_GetIdealSize(BUTTON_INFO *infoPtr, SIZE *size) RECT r; GetThemeTextExtent(theme, hdc, BP_COMMANDLINK, CMDLS_NORMAL, text, -1, flags, &text_bound, &r); - heap_free(text); + free(text); text_w = r.right - r.left; text_h = r.bottom - r.top; } @@ -1527,7 +1526,7 @@ static BOOL CL_GetIdealSize(BUTTON_INFO *infoPtr, SIZE *size) RECT r = text_bound; old_font = SelectObject(hdc, font); DrawTextW(hdc, text, -1, &r, flags | DT_CALCRECT); - heap_free(text); + free(text); text_w = r.right - r.left; text_h = r.bottom - r.top; @@ -1596,7 +1595,7 @@ static UINT BUTTON_CalcLayoutRects(const BUTTON_INFO *infoPtr, HDC hdc, RECT *la SetRectEmpty(labelRc); SetRectEmpty(imageRc); SetRectEmpty(textRc); - heap_free(text); + free(text); return (UINT)-1; } @@ -1699,7 +1698,7 @@ static UINT BUTTON_CalcLayoutRects(const BUTTON_INFO *infoPtr, HDC hdc, RECT *la SetRectEmpty(&imageRect); } } - heap_free(text); + free(text); CopyRect(labelRc, &labelRect); CopyRect(imageRc, &imageRect); @@ -1792,7 +1791,7 @@ static void BUTTON_DrawLabel(const BUTTON_INFO *infoPtr, HDC hdc, UINT dtFlags, if (!(text = get_button_text(infoPtr))) return; DrawStateW(hdc, hbr, BUTTON_DrawTextCallback, (LPARAM)text, dtFlags, textRect->left, textRect->top, textRect->right - textRect->left, textRect->bottom - textRect->top, flags); - heap_free(text); + free(text); } static void BUTTON_DrawThemedLabel(const BUTTON_INFO *info, HDC hdc, UINT text_flags, @@ -1824,7 +1823,7 @@ static void BUTTON_DrawThemedLabel(const BUTTON_INFO *info, HDC hdc, UINT text_f return; DrawThemeText(theme, hdc, part, state, text, lstrlenW(text), text_flags, 0, text_rect); - heap_free(text); + free(text); } /********************************************************************** @@ -2660,7 +2659,7 @@ static void CL_Paint( const BUTTON_INFO *infoPtr, HDC hDC, UINT action ) SelectObject(hDC, font); txt_h = DrawTextW(hDC, text, -1, &r, DT_TOP | DT_LEFT | DT_WORDBREAK | DT_END_ELLIPSIS); - heap_free(text); + free(text); } DeleteObject(font); } @@ -3153,7 +3152,7 @@ static void CL_ThemedPaint(HTHEME theme, const BUTTON_INFO *infoPtr, HDC hDC, in DrawThemeText(theme, hDC, part, state, text, len, dtFlags | DT_END_ELLIPSIS, 0, &r); txt_h = text_rect.bottom - text_rect.top; - heap_free(text); + free(text); } /* Draw the note */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/listview.c | 91 ++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index d060fd5c977..116c3c5cf94 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -485,7 +485,7 @@ static inline LPWSTR textdupTtoW(LPCWSTR text, BOOL isW) if (!isW && is_text(text)) { INT len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)text, -1, NULL, 0); - wstr = Alloc(len * sizeof(WCHAR)); + wstr = calloc(len, sizeof(WCHAR)); if (wstr) MultiByteToWideChar(CP_ACP, 0, (LPCSTR)text, -1, wstr, len); } TRACE(" wstr=%s\n", text == LPSTR_TEXTCALLBACKW ? "(callback)" : debugstr_w(wstr)); @@ -494,7 +494,7 @@ static inline LPWSTR textdupTtoW(LPCWSTR text, BOOL isW) static inline void textfreeT(LPWSTR wstr, BOOL isW) { - if (!isW && is_text(wstr)) Free (wstr); + if (!isW && is_text(wstr)) free (wstr); } /* @@ -507,7 +507,7 @@ static BOOL textsetptrT(LPWSTR *dest, LPCWSTR src, BOOL isW) if (src == LPSTR_TEXTCALLBACKW) { - if (is_text(*dest)) Free(*dest); + if (is_text(*dest)) free(*dest); *dest = LPSTR_TEXTCALLBACKW; } else @@ -808,12 +808,12 @@ static LRESULT notify_forward_header(const LISTVIEW_INFO *infoPtr, NMHEADERW *lp /* cleanup */ if(text) { - Free(lpnmh->pitem->pszText); + free(lpnmh->pitem->pszText); lpnmh->pitem->pszText = (LPSTR)text; } if(filter) { - Free(((HD_TEXTFILTERA*)lpnmh->pitem->pvFilter)->pszText); + free(((HD_TEXTFILTERA*)lpnmh->pitem->pvFilter)->pszText); ((HD_TEXTFILTERA*)lpnmh->pitem->pvFilter)->pszText = (LPSTR)filter; } @@ -958,7 +958,7 @@ static BOOL notify_dispinfoT(const LISTVIEW_INFO *infoPtr, UINT code, LPNMLVDISP *pdi->item.pszText = 0; /* make sure we don't process garbage */ } - buffer = Alloc( (return_ansi ? sizeof(WCHAR) : sizeof(CHAR)) * length); + buffer = calloc( length, return_ansi ? sizeof(WCHAR) : sizeof(CHAR) ); if (!buffer) return FALSE; if (return_ansi) @@ -1001,7 +1001,7 @@ static BOOL notify_dispinfoT(const LISTVIEW_INFO *infoPtr, UINT code, LPNMLVDISP pdi->item.pszText = ret_text; /* restores our buffer */ pdi->item.cchTextMax = ret_length; - Free(buffer); + free(buffer); return ret; } @@ -1010,14 +1010,14 @@ static BOOL notify_dispinfoT(const LISTVIEW_INFO *infoPtr, UINT code, LPNMLVDISP { length = WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, NULL, 0, NULL, NULL); - buffer = Alloc(length * sizeof(CHAR)); + buffer = calloc(length, sizeof(CHAR)); if (!buffer) return FALSE; WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, (LPSTR) buffer, ret_length, NULL, NULL); strcpy((LPSTR)pdi->item.pszText, (LPSTR)buffer); - Free(buffer); + free(buffer); } return ret; @@ -3118,11 +3118,11 @@ static void ranges_assert(RANGES ranges, LPCSTR desc, const char *file, int line static RANGES ranges_create(int count) { - RANGES ranges = Alloc(sizeof(struct tagRANGES)); + RANGES ranges = calloc(1, sizeof(*ranges)); if (!ranges) return NULL; ranges->hdpa = DPA_Create(count); if (ranges->hdpa) return ranges; - Free(ranges); + free(ranges); return NULL; } @@ -3131,7 +3131,7 @@ static void ranges_clear(RANGES ranges) INT i; for(i = 0; i < DPA_GetPtrCount(ranges->hdpa); i++) - Free(DPA_GetPtr(ranges->hdpa, i)); + free(DPA_GetPtr(ranges->hdpa, i)); DPA_DeleteAllPtrs(ranges->hdpa); } @@ -3141,7 +3141,7 @@ static void ranges_destroy(RANGES ranges) if (!ranges) return; ranges_clear(ranges); DPA_Destroy(ranges->hdpa); - Free(ranges); + free(ranges); } static RANGES ranges_clone(RANGES ranges) @@ -3153,12 +3153,12 @@ static RANGES ranges_clone(RANGES ranges) for (i = 0; i < DPA_GetPtrCount(ranges->hdpa); i++) { - RANGE *newrng = Alloc(sizeof(RANGE)); + RANGE *newrng = calloc(1, sizeof(*newrng)); if (!newrng) goto fail; *newrng = *((RANGE*)DPA_GetPtr(ranges->hdpa, i)); if (!DPA_SetPtr(clone->hdpa, i, newrng)) { - Free(newrng); + free(newrng); goto fail; } } @@ -3249,7 +3249,7 @@ static BOOL ranges_add(RANGES ranges, RANGE range) TRACE("Adding new range\n"); /* create the brand new range to insert */ - newrgn = Alloc(sizeof(RANGE)); + newrgn = calloc(1, sizeof(*newrgn)); if(!newrgn) goto fail; *newrgn = range; @@ -3261,7 +3261,7 @@ static BOOL ranges_add(RANGES ranges, RANGE range) /* and get it over with */ if (DPA_InsertPtr(ranges->hdpa, index, newrgn) == -1) { - Free(newrgn); + free(newrgn); goto fail; } } @@ -3298,7 +3298,7 @@ static BOOL ranges_add(RANGES ranges, RANGE range) mrgrgn = DPA_GetPtr(ranges->hdpa, mergeindex); chkrgn->lower = min(chkrgn->lower, mrgrgn->lower); chkrgn->upper = max(chkrgn->upper, mrgrgn->upper); - Free(mrgrgn); + free(mrgrgn); DPA_DeletePtr(ranges->hdpa, mergeindex); if (mergeindex < index) index --; } while(1); @@ -3334,7 +3334,7 @@ static BOOL ranges_del(RANGES ranges, RANGE range) (chkrgn->lower == range.lower) ) { DPA_DeletePtr(ranges->hdpa, index); - Free(chkrgn); + free(chkrgn); break; } /* case 2: engulf */ @@ -3342,7 +3342,7 @@ static BOOL ranges_del(RANGES ranges, RANGE range) (chkrgn->lower >= range.lower) ) { DPA_DeletePtr(ranges->hdpa, index); - Free(chkrgn); + free(chkrgn); } /* case 3: overlap upper */ else if ( (chkrgn->upper <= range.upper) && @@ -3362,13 +3362,13 @@ static BOOL ranges_del(RANGES ranges, RANGE range) { RANGE *newrgn; - if (!(newrgn = Alloc(sizeof(RANGE)))) goto fail; + if (!(newrgn = calloc(1, sizeof(*newrgn)))) goto fail; newrgn->lower = chkrgn->lower; newrgn->upper = range.lower; chkrgn->lower = range.upper; if (DPA_InsertPtr(ranges->hdpa, index, newrgn) == -1) { - Free(newrgn); + free(newrgn); goto fail; } break; @@ -4422,7 +4422,7 @@ static BOOL set_sub_item(const LISTVIEW_INFO *infoPtr, const LVITEMW *lpLVItem, SUBITEM_INFO *tmpSubItem; INT i; - lpSubItem = Alloc(sizeof(SUBITEM_INFO)); + lpSubItem = calloc(1, sizeof(*lpSubItem)); if (!lpSubItem) return FALSE; /* we could binary search here, if need be...*/ for (i = 1; i < DPA_GetPtrCount(hdpaSubItems); i++) @@ -4432,7 +4432,7 @@ static BOOL set_sub_item(const LISTVIEW_INFO *infoPtr, const LVITEMW *lpLVItem, } if (DPA_InsertPtr(hdpaSubItems, i, lpSubItem) == -1) { - Free(lpSubItem); + free(lpSubItem); return FALSE; } lpSubItem->iSubItem = lpLVItem->iSubItem; @@ -5568,13 +5568,13 @@ static BOOL LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr, BOOL destroy) j = DPA_GetPtrIndex(infoPtr->hdpaItemIds, lpItem->id); lpID = DPA_GetPtr(infoPtr->hdpaItemIds, j); DPA_DeletePtr(infoPtr->hdpaItemIds, j); - Free(lpID); + free(lpID); /* both item and subitem start with ITEMHDR header */ for (j = 0; j < DPA_GetPtrCount(hdpaSubItems); j++) { hdrItem = DPA_GetPtr(hdpaSubItems, j); - if (is_text(hdrItem->pszText)) Free(hdrItem->pszText); - Free(hdrItem); + if (is_text(hdrItem->pszText)) free(hdrItem->pszText); + free(hdrItem); } DPA_Destroy(hdpaSubItems); DPA_DeletePtr(infoPtr->hdpaItems, i); @@ -5683,7 +5683,7 @@ static BOOL LISTVIEW_DeleteColumn(LISTVIEW_INFO *infoPtr, INT nColumn) if (!SendMessageW(infoPtr->hwndHeader, HDM_DELETEITEM, nColumn, 0)) return FALSE; - Free(DPA_GetPtr(infoPtr->hdpaColumns, nColumn)); + free(DPA_GetPtr(infoPtr->hdpaColumns, nColumn)); DPA_DeletePtr(infoPtr->hdpaColumns, nColumn); if (!(infoPtr->dwStyle & LVS_OWNERDATA) && nColumn) @@ -5716,10 +5716,10 @@ static BOOL LISTVIEW_DeleteColumn(LISTVIEW_INFO *infoPtr, INT nColumn) { /* free string */ if (is_text(lpDelItem->hdr.pszText)) - Free(lpDelItem->hdr.pszText); + free(lpDelItem->hdr.pszText); /* free item */ - Free(lpDelItem); + free(lpDelItem); /* free dpa memory */ DPA_DeletePtr(hdpaSubItems, nSubItem); @@ -5858,12 +5858,12 @@ static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem) i = DPA_GetPtrIndex(infoPtr->hdpaItemIds, lpItem->id); lpID = DPA_GetPtr(infoPtr->hdpaItemIds, i); DPA_DeletePtr(infoPtr->hdpaItemIds, i); - Free(lpID); + free(lpID); for (i = 0; i < DPA_GetPtrCount(hdpaSubItems); i++) { hdrItem = DPA_GetPtr(hdpaSubItems, i); - if (is_text(hdrItem->pszText)) Free(hdrItem->pszText); - Free(hdrItem); + if (is_text(hdrItem->pszText)) free(hdrItem->pszText); + free(hdrItem); } DPA_Destroy(hdpaSubItems); } @@ -5914,7 +5914,7 @@ static BOOL LISTVIEW_EndEditLabelT(LISTVIEW_INFO *infoPtr, BOOL storeText, BOOL if (len++) { - if (!(pszText = Alloc(len * (isW ? sizeof(WCHAR) : sizeof(CHAR))))) + if (!(pszText = calloc(len, isW ? sizeof(WCHAR) : sizeof(CHAR)))) return FALSE; if (isW) @@ -5998,7 +5998,7 @@ static BOOL LISTVIEW_EndEditLabelT(LISTVIEW_INFO *infoPtr, BOOL storeText, BOOL res = LISTVIEW_SetItemT(infoPtr, &dispInfo.item, isW); cleanup: - Free(pszText); + free(pszText); return res; } @@ -7788,14 +7788,14 @@ static INT LISTVIEW_InsertItemT(LISTVIEW_INFO *infoPtr, const LVITEMW *lpLVItem, if (!is_assignable_item(lpLVItem, infoPtr->dwStyle)) return -1; - if (!(lpItem = Alloc(sizeof(ITEM_INFO)))) return -1; + if (!(lpItem = calloc(1, sizeof(*lpItem)))) return -1; /* insert item in listview control data structure */ if ( !(hdpaSubItems = DPA_Create(8)) ) goto fail; if ( !DPA_SetPtr(hdpaSubItems, 0, lpItem) ) assert (FALSE); /* link with id struct */ - if (!(lpID = Alloc(sizeof(ITEM_ID)))) goto fail; + if (!(lpID = calloc(1, sizeof(*lpID)))) goto fail; lpItem->id = lpID; lpID->item = hdpaSubItems; lpID->id = get_next_itemid(infoPtr); @@ -7923,7 +7923,7 @@ undo: fail: DPA_DeletePtr(hdpaSubItems, 0); DPA_Destroy (hdpaSubItems); - Free (lpItem); + free (lpItem); return -1; } @@ -8248,7 +8248,7 @@ static INT LISTVIEW_InsertColumnT(LISTVIEW_INFO *infoPtr, INT nColumn, if (nNewColumn != nColumn) ERR("nColumn=%d, nNewColumn=%d\n", nColumn, nNewColumn); /* create our own column info */ - if (!(lpColumnInfo = Alloc(sizeof(COLUMN_INFO)))) goto fail; + if (!(lpColumnInfo = calloc(1, sizeof(*lpColumnInfo)))) goto fail; if (DPA_InsertPtr(infoPtr->hdpaColumns, nNewColumn, lpColumnInfo) == -1) goto fail; if (lpColumn->mask & LVCF_FMT) lpColumnInfo->fmt = lpColumn->fmt; @@ -8296,8 +8296,8 @@ fail: if (nNewColumn != -1) SendMessageW(infoPtr->hwndHeader, HDM_DELETEITEM, nNewColumn, 0); if (lpColumnInfo) { - DPA_DeletePtr(infoPtr->hdpaColumns, nNewColumn); - Free(lpColumnInfo); + DPA_DeletePtr(infoPtr->hdpaColumns, nNewColumn); + free(lpColumnInfo); } return -1; } @@ -9546,7 +9546,7 @@ static LRESULT LISTVIEW_NCCreate(HWND hwnd, WPARAM wParam, const CREATESTRUCTW * TRACE("(lpcs=%p)\n", lpcs); /* initialize info pointer */ - infoPtr = Alloc(sizeof(LISTVIEW_INFO)); + infoPtr = calloc(1, sizeof(*infoPtr)); if (!infoPtr) return FALSE; SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr); @@ -9609,7 +9609,7 @@ fail: DPA_Destroy(infoPtr->hdpaPosX); DPA_Destroy(infoPtr->hdpaPosY); DPA_Destroy(infoPtr->hdpaColumns); - Free(infoPtr); + free(infoPtr); return FALSE; } @@ -10485,7 +10485,7 @@ static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr) DPA_Destroy(infoPtr->hdpaPosY); /* columns */ for (i = 0; i < DPA_GetPtrCount(infoPtr->hdpaColumns); i++) - Free(DPA_GetPtr(infoPtr->hdpaColumns, i)); + free(DPA_GetPtr(infoPtr->hdpaColumns, i)); DPA_Destroy(infoPtr->hdpaColumns); ranges_destroy(infoPtr->selectionRanges); @@ -10505,8 +10505,7 @@ static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr) SetWindowLongPtrW(infoPtr->hwndSelf, 0, 0); - /* free listview info pointer*/ - Free(infoPtr); + free(infoPtr); return 0; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1520
Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=126686 Your paranoid android. === debian11 (32 bit report) === comctl32: Unhandled exception: page fault on write access to 0xfffffdc8 in 32-bit code (0x6ab30fe4). === debian11 (32 bit zh:CN report) === comctl32: Unhandled exception: page fault on write access to 0xfffffdc8 in 32-bit code (0x6ab30fe4). === debian11b (64 bit WoW report) === comctl32: Unhandled exception: page fault on write access to 0xfffffffffffffdc8 in 64-bit code (0x000000687abf8a).
Removed propsheet changes for now. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/1520#note_17158
`Unhandled exception: page fault on write access to 0xfffffdc8 in 32-bit code (0x6ab30fe4).` These look to be related to the imagelist changes. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/1520#note_17542
participants (4)
-
Marvin -
Nikolay Sivov -
Nikolay Sivov (@nsivov) -
Zhiyi Zhang (@zhiyi)