summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alf/alf.cpp45
-rw-r--r--alf/alf.h20
-rw-r--r--alf/alfbutton.cpp4
-rw-r--r--alf/alfcombobox.cpp6
-rw-r--r--alf/alfcompat.cpp6
-rw-r--r--alf/alflabel.cpp4
-rw-r--r--alf/alflayout.cpp18
-rw-r--r--alf/alfpanel.cpp4
-rw-r--r--widgetfactory.cpp2
9 files changed, 74 insertions, 35 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);
diff --git a/alf/alf.h b/alf/alf.h
index 38e3b0b..f5e3b26 100644
--- a/alf/alf.h
+++ b/alf/alf.h
@@ -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);
}
diff --git a/widgetfactory.cpp b/widgetfactory.cpp
index d973aac..e22f4d9 100644
--- a/widgetfactory.cpp
+++ b/widgetfactory.cpp
@@ -65,7 +65,7 @@ handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid,
ALF_SetWidgetText(window, ID_LBL6, text);
- HeapFree(GetProcessHeap(), 0, text);
+ ALF_Free(text);
}
if (control != NULL && sourceid == ID_B4) {
HWND combo = ALF_WidgetHwndById(window, ID_COMBO2);