summaryrefslogtreecommitdiff
path: root/alf
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2019-06-29 16:55:38 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2019-06-29 16:55:38 +0200
commitecfb4b72fec0c25ef416038ef22db5d34d687ee4 (patch)
tree119201f80df6c5bb6f40949a26d1015263cb4097 /alf
parentae25d8012939de481633fa3572e7cd598d8a5a5f (diff)
get rid of last usages of InterlockedIncrement
doesn't work right on Win95/NT 3.51
Diffstat (limited to 'alf')
-rw-r--r--alf/alf.cpp30
-rw-r--r--alf/alfcombobox.cpp2
-rw-r--r--alf/alfcompat.cpp10
-rw-r--r--alf/alfcompat.h3
-rw-r--r--alf/alfpanel.cpp2
-rw-r--r--alf/alfpriv.h2
-rw-r--r--alf/alfspacer.cpp2
7 files changed, 21 insertions, 30 deletions
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);
diff --git a/alf/alfcombobox.cpp b/alf/alfcombobox.cpp
index 6dbc15a..efe3706 100644
--- a/alf/alfcombobox.cpp
+++ b/alf/alfcombobox.cpp
@@ -268,7 +268,7 @@ ALF_RegisterComboClass(void)
ZeroMemory(&cls, sizeof(cls));
TCHAR classNameBuf[256];
- ALF_BuildRandomClassName(TEXT("ALFComboBox"), classNameBuf, 256);
+ ALF_BuildUniqueName(classNameBuf, TEXT("ALFComboBox."), (ULONG_PTR)&_alf_comboClass);
cls.hInstance = ALF_HINSTANCE;
cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW);
diff --git a/alf/alfcompat.cpp b/alf/alfcompat.cpp
index 5c743ce..3895545 100644
--- a/alf/alfcompat.cpp
+++ b/alf/alfcompat.cpp
@@ -232,16 +232,6 @@ ALF_GetAveCharWidth(HDC hdc)
return (s.cx / 26 + 1) / 2;
}
-void
-ALF_UniqueCounterValue(LONG_PTR *pCounterId, LONG_PTR *pCounterValue)
-{
- static LONG counter = 0;
-
- LONG r = InterlockedIncrement(&counter);
- *pCounterId = (LONG_PTR)&counter;
- *pCounterValue = r;
-}
-
static HTHEME WINAPI
ALF_Compat_fallbackOpenThemeData(HWND window, LPCWSTR classNames)
{
diff --git a/alf/alfcompat.h b/alf/alfcompat.h
index 6926de5..9c7f3f2 100644
--- a/alf/alfcompat.h
+++ b/alf/alfcompat.h
@@ -57,9 +57,6 @@ typedef struct {
long
ALF_GetAveCharWidth(HDC hdc);
-void
-ALF_UniqueCounterValue(LONG_PTR *pCounterId, LONG_PTR *pCounterValue);
-
typedef void *ALF_Compat_HANIMATIONBUFFER;
typedef enum {
diff --git a/alf/alfpanel.cpp b/alf/alfpanel.cpp
index 58f933e..5a18976 100644
--- a/alf/alfpanel.cpp
+++ b/alf/alfpanel.cpp
@@ -58,7 +58,7 @@ ALF_RegisterPanelClass(void)
ZeroMemory(&cls, sizeof(cls));
TCHAR classNameBuf[256];
- ALF_BuildRandomClassName(TEXT("ALFPanel"), classNameBuf, 256);
+ ALF_BuildUniqueName(classNameBuf, TEXT("ALFPanel."), (ULONG_PTR)&_alf_panelClass);
cls.hInstance = ALF_HINSTANCE;
cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW);
diff --git a/alf/alfpriv.h b/alf/alfpriv.h
index c3a7fb9..aa0b39d 100644
--- a/alf/alfpriv.h
+++ b/alf/alfpriv.h
@@ -53,7 +53,7 @@ void
ALF_RegisterSpacerClass(void);
void
-ALF_BuildRandomClassName(const TCHAR *prefix, TCHAR *buf, DWORD cchBuf);
+ALF_BuildUniqueName(TCHAR *buf, const TCHAR *prefix, ULONG_PTR uniquifier);
BOOL
ALF_ShouldMessageBubble(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
diff --git a/alf/alfspacer.cpp b/alf/alfspacer.cpp
index da18600..1b9278d 100644
--- a/alf/alfspacer.cpp
+++ b/alf/alfspacer.cpp
@@ -9,7 +9,7 @@ ALF_RegisterSpacerClass(void)
ZeroMemory(&cls, sizeof(cls));
TCHAR classNameBuf[256];
- ALF_BuildRandomClassName(TEXT("ALFSpacer"), classNameBuf, 256);
+ ALF_BuildUniqueName(classNameBuf, TEXT("ALFSpacer."), (ULONG_PTR)&_alf_spacerClass);
cls.hInstance = ALF_HINSTANCE;
cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW);