From ecfb4b72fec0c25ef416038ef22db5d34d687ee4 Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Sat, 29 Jun 2019 16:55:38 +0200 Subject: get rid of last usages of InterlockedIncrement doesn't work right on Win95/NT 3.51 --- alf/alf.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'alf/alf.cpp') diff --git a/alf/alf.cpp b/alf/alf.cpp index 06b0099..61ce4ee 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -419,16 +419,18 @@ ALF_Free(const void *p) } void -ALF_BuildRandomClassName(const TCHAR* prefix, TCHAR* buf, DWORD cchBuf) +ALF_BuildUniqueName(TCHAR *buf, const TCHAR *prefix, ULONG_PTR uniquifier) { - LONG_PTR c1, c2; - ALF_UniqueCounterValue(&c1, &c2); + int prefixlen = lstrlen(prefix); + CopyMemory(buf, prefix, prefixlen * sizeof(*prefix)); - DWORD_PTR params[] = { (DWORD_PTR)prefix, (DWORD_PTR)c1, (DWORD_PTR)c2 }; - - FormatMessage(FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_FROM_STRING, - TEXT("%1.%2!d!.%3!d!"), 0, 0, - buf, cchBuf, (va_list*)params); + int numlen = sizeof(LONG_PTR)*2; + int i = numlen - 1; + while (i >= 0) { + buf[prefixlen + i] = "0123456789ABCDEF"[uniquifier & 0xf]; + uniquifier >>= 4; + i--; + } } LPTSTR @@ -437,13 +439,16 @@ ALF_RegisterWindowClass(HINSTANCE hInstance, const ALFWindowClassParams *params) WNDCLASS cls; ZeroMemory(&cls, sizeof(cls)); + ALFWindowVTable *pvtbl = ALF_New(ALFWindowVTable, 1); + *pvtbl = params->vtbl; + const TCHAR *classNamePtr = params->className; TCHAR classNameBuf[256]; if (!classNamePtr) { ZeroMemory(classNameBuf, sizeof(classNameBuf)); classNamePtr = classNameBuf; - ALF_BuildRandomClassName(TEXT("ALFWindow"), classNameBuf, 256); + ALF_BuildUniqueName(classNameBuf, TEXT("ALFWindow."), (ULONG_PTR)pvtbl); } cls.style = params->classStyle; @@ -461,11 +466,10 @@ ALF_RegisterWindowClass(HINSTANCE hInstance, const ALFWindowClassParams *params) cls.lpfnWndProc = ALF_WindowProc; ATOM classatom = RegisterClass(&cls); - if (!classatom) + if (!classatom) { + ALF_Free(pvtbl); return NULL; - - ALFWindowVTable *pvtbl = ALF_New(ALFWindowVTable, 1); - *pvtbl = params->vtbl; + } // XXX: This could have been a HWND_MESSAGE window, but Win95 doesn't support these HWND tmp = CreateWindowEx(0, MAKEINTATOM(classatom), TEXT("dummy"), 0, 0, 0, 0, 0, NULL, 0, hInstance, 0); -- cgit v1.2.3