diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2019-01-25 21:45:01 +0100 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2019-01-25 21:45:01 +0100 |
| commit | 55211af76164fe6c39249c14be47363d35a4db0f (patch) | |
| tree | 417d9e8805c52d6421798331bea59993e7f1fa1a /alf | |
| parent | 02d94ecd62e11e28ba87451c392cc6b633bb5c56 (diff) | |
add memory allocation functions
Diffstat (limited to 'alf')
| -rw-r--r-- | alf/alf.cpp | 45 | ||||
| -rw-r--r-- | alf/alf.h | 20 | ||||
| -rw-r--r-- | alf/alfbutton.cpp | 4 | ||||
| -rw-r--r-- | alf/alfcombobox.cpp | 6 | ||||
| -rw-r--r-- | alf/alfcompat.cpp | 6 | ||||
| -rw-r--r-- | alf/alflabel.cpp | 4 | ||||
| -rw-r--r-- | alf/alflayout.cpp | 18 | ||||
| -rw-r--r-- | alf/alfpanel.cpp | 4 |
8 files changed, 73 insertions, 34 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp index f10bdd3..06e6e0c 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -25,9 +25,7 @@ ALF_DestroyWindowPriv(ALFWindowPriv *priv) if (priv->fonts.hMessageFont) DeleteObject(priv->fonts.hMessageFont); - HeapFree(GetProcessHeap(), 0, priv->layout.columns); - HeapFree(GetProcessHeap(), 0, priv->layout.rows); - HeapFree(GetProcessHeap(), 0, priv); + ALF_Free(priv); } int @@ -319,7 +317,7 @@ ALF_WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) if (msg == WM_NCCREATE) { CREATESTRUCT *cs = (CREATESTRUCT*)(void*)lparam; if (cs->lpCreateParams) { - ALFWindowPriv *priv = (ALFWindowPriv*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, sizeof(ALFWindowPriv)); + ALFWindowPriv *priv = ALF_New(ALFWindowPriv, 1); SetWindowLongPtr(hwnd, 0, (LONG_PTR)priv); ALF_InitializeWindowPriv(hwnd, priv, *((void**)cs->lpCreateParams)); } @@ -340,7 +338,7 @@ ALF_WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) ALFAPP ALF_CreateApplication(HINSTANCE hInstance) { - ALFAPP app = (ALFAPP)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, sizeof(struct ALFAppPriv)); + ALFAPP app = ALF_New(struct ALFAppPriv, 1); app->hInstance = hInstance; InitCommonControls(); @@ -358,7 +356,30 @@ ALF_TeardownApplication(ALFAPP app) UnregisterClass(app->comboClass, app->hInstance); UnregisterClass(app->panelClass, app->hInstance); UnregisterClass(app->spacerClass, app->hInstance); - HeapFree(GetProcessHeap(), 0, app); + ALF_Free(app); +} + +void * +ALF_Alloc(SIZE_T nmemb, SIZE_T size) +{ + // FIXME! potential overflow + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, nmemb * size); +} + +void * +ALF_ReAlloc(void *ptr, SIZE_T nmemb, SIZE_T size) +{ + // FIXME! potential overflow + if (ptr) + return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, ptr, nmemb * size); + else + return ALF_Alloc(nmemb, size); +} + +void +ALF_Free(const void *p) +{ + HeapFree(GetProcessHeap(), 0, (void*)p); } void @@ -407,7 +428,7 @@ ALF_RegisterWindowClass(ALFAPP app, const ALFWindowClassParams *params) if (!classatom) return NULL; - ALFWindowVTable *pvtbl = (ALFWindowVTable*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, sizeof(ALFWindowVTable)); + ALFWindowVTable *pvtbl = ALF_New(ALFWindowVTable, 1); *pvtbl = params->vtbl; // XXX: This could have been a HWND_MESSAGE window, but Win95 doesn't support these @@ -426,7 +447,7 @@ ALF_UnregisterWindowClass(ALFAPP app, LPCTSTR className) ALFWindowVTable *pvtbl = (ALFWindowVTable*)GetClassLongPtr(tmp, 0); DestroyWindow(tmp); - HeapFree(GetProcessHeap(), 0, pvtbl); + ALF_Free(pvtbl); UnregisterClass(className, app->hInstance); } @@ -590,23 +611,23 @@ ALF_SetWidgetText(HWND parent, WORD id, const TCHAR *text) ALF_SetText(h, text); } -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_Text(HWND hwnd) { int len = GetWindowTextLengthA(hwnd); if (len > 0) { - TCHAR *buf = (TCHAR*)HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY, (len + 1)*sizeof(TCHAR)); + TCHAR *buf = ALF_New(TCHAR, len+1); if (GetWindowText(hwnd, buf, len)) { return buf; } else { - HeapFree(GetProcessHeap(), 0, buf); + ALF_Free(buf); } } return NULL; } -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_WidgetText(HWND parent, WORD id) { HWND h = ALF_WidgetHwndById(parent, id); @@ -89,6 +89,18 @@ ALF_CreateApplication(HINSTANCE hInstance); void ALF_TeardownApplication(ALFAPP app); +void * +ALF_Alloc(SIZE_T nmemb, SIZE_T size); + +void * +ALF_ReAlloc(void *ptr, SIZE_T nmemb, SIZE_T size); + +#define ALF_New(type, count) ((type *)ALF_Alloc((count), sizeof(type))) +#define ALF_ReNew(ptr, type, count) ((type *)ALF_ReAlloc(ptr, (count), sizeof(type))) + +void +ALF_Free(const void *p); + LPTSTR ALF_RegisterWindowClass(ALFAPP app, const ALFWindowClassParams *params); @@ -180,10 +192,10 @@ ALF_SetText(HWND hwnd, const TCHAR *text); void ALF_SetWidgetText(HWND parent, WORD id, const TCHAR *text); -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_Text(HWND hwnd); -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_WidgetText(HWND parent, WORD id); DWORD @@ -236,7 +248,7 @@ ALF_ComboBoxInsertString(HWND combo, int index, const TCHAR *text); void ALF_ComboBoxRemoveString(HWND combo, int index); -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_ComboBoxStringForIndex(HWND combo, int index); int @@ -245,7 +257,7 @@ ALF_ComboBoxCurrentIndex(HWND combo); void ALF_ComboBoxSetCurrentIndex(HWND combo, int index); -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_ComboBoxCurrentText(HWND combo); void diff --git a/alf/alfbutton.cpp b/alf/alfbutton.cpp index b0458b2..5f7a638 100644 --- a/alf/alfbutton.cpp +++ b/alf/alfbutton.cpp @@ -23,12 +23,12 @@ ALF__ButtonSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT RECT r = { 0, 0, 0x7FFFFFFF, 100 }; int textlen = GetWindowTextLength(hwnd); - TCHAR *textbuf = (TCHAR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, (textlen + 1)*sizeof(TCHAR)); + TCHAR *textbuf = ALF_New(TCHAR, textlen + 1); GetWindowText(hwnd, textbuf, textlen+1); DrawText(hdc, textbuf, -1, &r, format); - HeapFree(GetProcessHeap(), 0, textbuf); + ALF_Free(textbuf); int xpadding = ALF_Compat_GetSystemMetricsForDpi(SM_CXEDGE, ALF_CentipointsToPixels(GetParent(hwnd), 7200)) * 2 + 6; diff --git a/alf/alfcombobox.cpp b/alf/alfcombobox.cpp index 409d64f..df88730 100644 --- a/alf/alfcombobox.cpp +++ b/alf/alfcombobox.cpp @@ -370,16 +370,16 @@ ALF_ComboBoxSetCurrentIndex(HWND combo, int index) SendMessage(combo, CB_SETCURSEL, (WPARAM)index, 0); } -TCHAR * // free with HeapFree +TCHAR * // free with ALF_Free ALF_ComboBoxStringForIndex(HWND combo, int index) { int len = (int)SendMessage(combo, CB_GETLBTEXTLEN, (WPARAM)index, 0); if (len > 0) { - TCHAR* buf = (TCHAR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, (len + 1)*sizeof(WCHAR)); + TCHAR* buf = ALF_New(TCHAR, len + 1); if (SendMessage(combo, CB_GETLBTEXT, (WPARAM)index, (LPARAM)buf)) { return buf; } else { - HeapFree(GetProcessHeap(), 0, buf); + ALF_Free(buf); } } diff --git a/alf/alfcompat.cpp b/alf/alfcompat.cpp index aee27fb..2260ed4 100644 --- a/alf/alfcompat.cpp +++ b/alf/alfcompat.cpp @@ -166,7 +166,7 @@ ALF_Compat_fallbackSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar if (!data->pfnSubclass && !data->runCounter) { SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); - HeapFree(GetProcessHeap(), 0, data); + ALF_Free(data); } return ret; @@ -175,7 +175,7 @@ ALF_Compat_fallbackSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar static BOOL WINAPI ALF_Compat_fallbackSetWindowSubclass(HWND hwnd, ALF_COMPAT_SUBCLASSPROC pfnSubclass, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { - ALFWindowSubclassData *data = (ALFWindowSubclassData *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ALFWindowSubclassData)); + ALFWindowSubclassData *data = ALF_New(ALFWindowSubclassData, 1); data->pfnSubclass = pfnSubclass; data->uIdSubclass = uIdSubclass; @@ -212,7 +212,7 @@ ALF_Compat_fallbackRemoveWindowSubclass(HWND hwnd, ALF_COMPAT_SUBCLASSPROC pfnSu // and wants to call DefSubclassProc if (!data->runCounter) { SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); - HeapFree(GetProcessHeap(), 0, data); + ALF_Free(data); } return TRUE; diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp index eb27fb1..0a18a54 100644 --- a/alf/alflabel.cpp +++ b/alf/alflabel.cpp @@ -39,12 +39,12 @@ ALF__LabelSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_ RECT r = { 0, 0, 100, 100 }; int textlen = GetWindowTextLength(hwnd); - TCHAR *textbuf = (TCHAR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, (textlen + 1)*sizeof(TCHAR)); + TCHAR *textbuf = ALF_New(TCHAR, textlen + 1); GetWindowText(hwnd, textbuf, textlen+1); DrawText(hdcLabel, textbuf, -1, &r, format); - HeapFree(GetProcessHeap(), 0, textbuf); + ALF_Free(textbuf); SIZE *pSize = (SIZE*)(void*)lParam; if (pSize->cx == 0) diff --git a/alf/alflayout.cpp b/alf/alflayout.cpp index cb89965..5e79443 100644 --- a/alf/alflayout.cpp +++ b/alf/alflayout.cpp @@ -11,9 +11,15 @@ void ALF_Layout_Clear(ALFLayout *layout) { ALF_FOR_LIST(ALFWidgetPriv, list, &layout->widgets, w) { - HeapFree(GetProcessHeap(), 0, w); + ALF_Free(w); } ALF_ListInit(&layout->widgets); + ALF_Free(layout->columns); + ALF_Free(layout->rows); + layout->columns = NULL; + layout->rows = NULL; + layout->nColumns = 0; + layout->nRows = 0; } @@ -59,20 +65,20 @@ ALF_Layout_CalcSizes(ALFLayout* layout, HWND window) // FIXME! overflow, use reallocarray(2) equivalent if (layout->nColumns == 0) { layout->nColumns = 1; - layout->columns = (ALFLayoutRowOrColumn*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, layout->nColumns*sizeof(layout->columns[0])); + layout->columns = ALF_New(ALFLayoutRowOrColumn, layout->nColumns); } else { layout->nColumns *= 2; - layout->columns = (ALFLayoutRowOrColumn*)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, layout->columns, layout->nColumns*sizeof(layout->columns[0])); + layout->columns = ALF_ReNew(layout->columns, ALFLayoutRowOrColumn, layout->nColumns); } } while ((int)c->y >= layout->nRows) { // FIXME! overflow, use reallocarray(2) equivalent if (layout->nRows == 0) { layout->nRows = 1; - layout->rows = (ALFLayoutRowOrColumn*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, layout->nRows*sizeof(layout->rows[0])); + layout->rows = ALF_New(ALFLayoutRowOrColumn, layout->nRows); } else { layout->nRows *= 2; - layout->rows = (ALFLayoutRowOrColumn*)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, layout->rows, layout->nRows*sizeof(layout->rows[0])); + layout->rows = ALF_ReNew(layout->rows, ALFLayoutRowOrColumn, layout->nRows); } } @@ -244,7 +250,7 @@ ALF_Layout_Apply(ALFLayout* layout, HWND window) void ALF_Layout_AddWidget(ALFLayout* layout, HWND window, const ALFWidgetLayoutParams* params) { - ALFWidgetPriv *w = (ALFWidgetPriv*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY|HEAP_GENERATE_EXCEPTIONS, sizeof(ALFWidgetPriv)); + ALFWidgetPriv *w = ALF_New(ALFWidgetPriv, 1); w->hwnd = params->hwnd; w->x = params->x; w->y = params->y; diff --git a/alf/alfpanel.cpp b/alf/alfpanel.cpp index 070c286..b70dbf9 100644 --- a/alf/alfpanel.cpp +++ b/alf/alfpanel.cpp @@ -22,7 +22,7 @@ static LRESULT WINAPI ALF__PanelWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam) { if (msg == WM_NCCREATE) { - ALFPanelPriv *p = (ALFPanelPriv*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ALFPanelPriv)); + ALFPanelPriv *p = ALF_New(ALFPanelPriv, 1); ALFAPP app = (ALFAPP)(((CREATESTRUCT*)lparam)->lpCreateParams); ALF_Panel_IntializePriv(p, app); @@ -34,7 +34,7 @@ ALF__PanelWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam) if (msg == WM_NCDESTROY) { ALF_Panel_ClearPriv(priv); - HeapFree(GetProcessHeap(), 0, priv); + ALF_Free(priv); SetWindowLongPtr(window, 0, 0); } |
