Signed-off-by: Michael Stefaniuc mstefani@winehq.org --- Includes non trivial manual changes, there might be dragons...
dlls/atl/atl.c | 20 +++++--------- dlls/atl/atl_ax.c | 35 +++++++++++------------- dlls/atl/registrar.c | 60 +++++++++++++++-------------------------- dlls/atl/tests/atl_ax.c | 3 +-- 4 files changed, 44 insertions(+), 74 deletions(-)
diff --git a/dlls/atl/atl.c b/dlls/atl/atl.c index 358986d7a4c..7529425b7ee 100644 --- a/dlls/atl/atl.c +++ b/dlls/atl/atl.c @@ -123,7 +123,6 @@ HRESULT WINAPI AtlUnmarshalPtr(IStream *stm, const IID *iid, IUnknown **ppUnk) */ HDC WINAPI AtlCreateTargetDC( HDC hdc, DVTARGETDEVICE *dv ) { - static const WCHAR displayW[] = {'d','i','s','p','l','a','y',0}; const WCHAR *driver = NULL, *device = NULL, *port = NULL; DEVMODEW *devmode = NULL;
@@ -139,7 +138,7 @@ HDC WINAPI AtlCreateTargetDC( HDC hdc, DVTARGETDEVICE *dv ) else { if (hdc) return hdc; - driver = displayW; + driver = L"display"; } return CreateDCW( driver, device, port, devmode ); } @@ -342,12 +341,10 @@ HRESULT WINAPI AtlLoadTypeLib(HINSTANCE inst, LPCOLESTR lpszIndex, WCHAR *path; HRESULT hres;
- static const WCHAR tlb_extW[] = {'.','t','l','b',0}; - TRACE("(%p %s %p %p)\n", inst, debugstr_w(lpszIndex), pbstrPath, ppTypeLib);
index_len = lpszIndex ? lstrlenW(lpszIndex) : 0; - path = heap_alloc((MAX_PATH+index_len)*sizeof(WCHAR) + sizeof(tlb_extW)); + path = heap_alloc((MAX_PATH+index_len)*sizeof(WCHAR) + sizeof(L".tlb")); if(!path) return E_OUTOFMEMORY;
@@ -367,7 +364,7 @@ HRESULT WINAPI AtlLoadTypeLib(HINSTANCE inst, LPCOLESTR lpszIndex, for(ptr = path+path_len-1; ptr > path && *ptr != '\' && *ptr != '.'; ptr--); if(*ptr != '.') ptr = path+path_len; - memcpy(ptr, tlb_extW, sizeof(tlb_extW)); + lstrcpyW(ptr, L".tlb"); hres = LoadTypeLib(path, &typelib); }
@@ -781,20 +778,15 @@ HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID clsid, const struct _AT }
if(!reg) { - WCHAR reg_path[256] = {'C','L','S','I','D','\'}, *ptr = reg_path+6; - - static const WCHAR implemented_catW[] = - {'I','m','p','l','e','m','e','n','t','e','d',' ','C','a','t','e','g','o','r','i','e','s',0}; - static const WCHAR required_catW[] = - {'R','e','q','u','i','r','e','d',' ','C','a','t','e','g','o','r','i','e','s',0}; + WCHAR reg_path[256] = L"CLSID\", *ptr = reg_path+6;
ptr += StringFromGUID2(clsid, ptr, 64)-1; *ptr++ = '\';
- memcpy(ptr, implemented_catW, sizeof(implemented_catW)); + lstrcpyW(ptr, L"Implemented Categories"); RegDeleteKeyW(HKEY_CLASSES_ROOT, reg_path);
- memcpy(ptr, required_catW, sizeof(required_catW)); + lstrcpyW(ptr, L"Required Categories"); RegDeleteKeyW(HKEY_CLASSES_ROOT, reg_path); }
diff --git a/dlls/atl/atl_ax.c b/dlls/atl/atl_ax.c index 3bb9dbc22df..f180f5e2b40 100644 --- a/dlls/atl/atl_ax.c +++ b/dlls/atl/atl_ax.c @@ -55,8 +55,6 @@ typedef struct IOCS { BOOL fActive, fInPlace, fWindowless; } IOCS;
-static const WCHAR wine_atl_iocsW[] = {'_','_','W','I','N','E','_','A','T','L','_','I','O','C','S','\0'}; - /********************************************************************** * AtlAxWin class window procedure */ @@ -90,20 +88,20 @@ BOOL WINAPI AtlAxWinInit(void) WNDCLASSEXW wcex;
#if _ATL_VER <= _ATL_VER_30 -#define ATL_NAME_SUFFIX 0 +#define ATL_NAME_SUFFIX #elif _ATL_VER == _ATL_VER_80 -#define ATL_NAME_SUFFIX '8','0',0 +#define ATL_NAME_SUFFIX L"800" #elif _ATL_VER == _ATL_VER_90 -#define ATL_NAME_SUFFIX '9','0',0 +#define ATL_NAME_SUFFIX L"900" #elif _ATL_VER == _ATL_VER_100 -#define ATL_NAME_SUFFIX '1','0','0',0 +#define ATL_NAME_SUFFIX L"1000" #elif _ATL_VER == _ATL_VER_110 -#define ATL_NAME_SUFFIX '1','1','0',0 +#define ATL_NAME_SUFFIX L"1100" #else #error Unsupported version #endif
- static const WCHAR AtlAxWinW[] = {'A','t','l','A','x','W','i','n',ATL_NAME_SUFFIX}; + static const WCHAR AtlAxWinW[] = L"AtlAxWin" ATL_NAME_SUFFIX;
FIXME("version %04x semi-stub\n", _ATL_VER);
@@ -127,7 +125,7 @@ BOOL WINAPI AtlAxWinInit(void) return FALSE;
if(_ATL_VER > _ATL_VER_30) { - static const WCHAR AtlAxWinLicW[] = {'A','t','l','A','x','W','i','n','L','i','c',ATL_NAME_SUFFIX}; + static const WCHAR AtlAxWinLicW[] = L"AtlAxWinLic" ATL_NAME_SUFFIX;
wcex.lpszClassName = AtlAxWinLicW; if ( !RegisterClassExW( &wcex ) ) @@ -152,7 +150,7 @@ static HRESULT IOCS_Detach( IOCS *This ) /* remove subclassing */ if ( This->hWnd ) { SetWindowLongPtrW( This->hWnd, GWLP_WNDPROC, (ULONG_PTR) This->OrigWndProc ); - RemovePropW( This->hWnd, wine_atl_iocsW); + RemovePropW( This->hWnd, L"__WINE_ATL_IOCS" ); This->hWnd = NULL; } if ( This->control ) @@ -906,7 +904,7 @@ static LRESULT IOCS_OnWndProc( IOCS *This, HWND hWnd, UINT uMsg, WPARAM wParam,
static LRESULT CALLBACK AtlHost_wndproc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) { - IOCS *This = (IOCS*) GetPropW( hWnd, wine_atl_iocsW ); + IOCS *This = (IOCS*) GetPropW( hWnd, L"__WINE_ATL_IOCS" ); return IOCS_OnWndProc( This, hWnd, wMsg, wParam, lParam ); }
@@ -915,7 +913,7 @@ static HRESULT IOCS_Attach( IOCS *This, HWND hWnd, IUnknown *pUnkControl ) /* su This->hWnd = hWnd; IUnknown_QueryInterface( pUnkControl, &IID_IOleObject, (void**)&This->control ); IOleObject_SetClientSite( This->control, &This->IOleClientSite_iface ); - SetPropW( hWnd, wine_atl_iocsW, This ); + SetPropW( hWnd, L"__WINE_ATL_IOCS", This ); This->OrigWndProc = (WNDPROC)SetWindowLongPtrW( hWnd, GWLP_WNDPROC, (ULONG_PTR) AtlHost_wndproc );
return S_OK; @@ -924,9 +922,8 @@ static HRESULT IOCS_Attach( IOCS *This, HWND hWnd, IUnknown *pUnkControl ) /* su static HRESULT IOCS_Init( IOCS *This ) { RECT rect; - static const WCHAR AXWIN[] = {'A','X','W','I','N',0};
- IOleObject_SetHostNames( This->control, AXWIN, AXWIN ); + IOleObject_SetHostNames( This->control, L"AXWIN", L"AXWIN" );
GetClientRect( This->hWnd, &rect ); IOCS_OnSize( This, &rect ); @@ -1000,7 +997,6 @@ enum content
static enum content get_content_type(LPCOLESTR name, CLSID *control_id) { - static const WCHAR mshtml_prefixW[] = {'m','s','h','t','m','l',':',0}; WCHAR new_urlW[MAX_PATH]; DWORD size = MAX_PATH;
@@ -1021,7 +1017,7 @@ static enum content get_content_type(LPCOLESTR name, CLSID *control_id) return IsURL; }
- if (!wcsnicmp(name, mshtml_prefixW, 7)) + if (!wcsnicmp(name, L"mshtml:", 7)) { FIXME("mshtml prefix not implemented\n"); *control_id = CLSID_WebBrowser; @@ -1266,8 +1262,7 @@ static LPDLGTEMPLATEW AX_ConvertDialogTemplate(LPCDLGTEMPLATEW src_tmpl) src += lstrlenW(src) + 1; /* title */ if ( GET_WORD(tmp) == '{' ) /* all this mess created because of this line */ { - static const WCHAR AtlAxWin[] = {'A','t','l','A','x','W','i','n', 0}; - PUT_BLOCK(AtlAxWin, ARRAY_SIZE(AtlAxWin)); + PUT_BLOCK(L"AtlAxWin", ARRAY_SIZE(L"AtlAxWin")); PUT_BLOCK(tmp, lstrlenW(tmp)+1); } else PUT_BLOCK(tmp, src-tmp); @@ -1373,7 +1368,7 @@ HRESULT WINAPI AtlAxGetHost(HWND hWnd, IUnknown **host)
*host = NULL;
- This = (IOCS*) GetPropW( hWnd, wine_atl_iocsW ); + This = (IOCS*) GetPropW( hWnd, L"__WINE_ATL_IOCS" ); if ( !This ) { WARN("No container attached to %p\n", hWnd ); @@ -1395,7 +1390,7 @@ HRESULT WINAPI AtlAxGetControl(HWND hWnd, IUnknown **pUnk)
*pUnk = NULL;
- This = (IOCS*) GetPropW( hWnd, wine_atl_iocsW ); + This = (IOCS*) GetPropW( hWnd, L"__WINE_ATL_IOCS" ); if ( !This || !This->control ) { WARN("No control attached to %p\n", hWnd ); diff --git a/dlls/atl/registrar.c b/dlls/atl/registrar.c index 586cce3201d..7c3c5976b22 100644 --- a/dlls/atl/registrar.c +++ b/dlls/atl/registrar.c @@ -32,27 +32,20 @@ static const struct { WCHAR name[22]; HKEY key; } root_keys[] = { - {{'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T',0}, - HKEY_CLASSES_ROOT}, - {{'H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E','R',0}, - HKEY_CURRENT_USER}, - {{'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0}, - HKEY_LOCAL_MACHINE}, - {{'H','K','E','Y','_','U','S','E','R','S',0}, - HKEY_USERS}, - {{'H','K','E','Y','_','P','E','R','F','O','R','M','A','N','C','E','_','D','A','T','A',0}, - HKEY_PERFORMANCE_DATA}, - {{'H','K','E','Y','_','D','Y','N','_','D','A','T','A',0}, - HKEY_DYN_DATA}, - {{'H','K','E','Y','_','C','U','R','R','E','N','T','_','C','O','N','F','I','G',0}, - HKEY_CURRENT_CONFIG}, - {{'H','K','C','R',0}, HKEY_CLASSES_ROOT}, - {{'H','K','C','U',0}, HKEY_CURRENT_USER}, - {{'H','K','L','M',0}, HKEY_LOCAL_MACHINE}, - {{'H','K','U',0}, HKEY_USERS}, - {{'H','K','P','D',0}, HKEY_PERFORMANCE_DATA}, - {{'H','K','D','D',0}, HKEY_DYN_DATA}, - {{'H','K','C','C',0}, HKEY_CURRENT_CONFIG} + {L"HKEY_CLASSES_ROOT", HKEY_CLASSES_ROOT}, + {L"HKEY_CURRENT_USER", HKEY_CURRENT_USER}, + {L"HKEY_LOCAL_MACHINE", HKEY_LOCAL_MACHINE}, + {L"HKEY_USERS", HKEY_USERS}, + {L"HKEY_PERFORMANCE_DATA", HKEY_PERFORMANCE_DATA}, + {L"HKEY_DYN_DATA", HKEY_DYN_DATA}, + {L"HKEY_CURRENT_CONFIG", HKEY_CURRENT_CONFIG}, + {L"HKCR", HKEY_CLASSES_ROOT}, + {L"HKCU", HKEY_CURRENT_USER}, + {L"HKLM", HKEY_LOCAL_MACHINE}, + {L"HKU", HKEY_USERS}, + {L"HKPD", HKEY_PERFORMANCE_DATA}, + {L"HKDD", HKEY_DYN_DATA}, + {L"HKCC", HKEY_CURRENT_CONFIG} };
typedef struct rep_list_str { @@ -150,7 +143,6 @@ static HRESULT do_preprocess(const Registrar *This, LPCOLESTR data, strbuf *buf) { LPCOLESTR iter, iter2 = data; rep_list *rep_iter; - static const WCHAR wstr[] = {'%',0};
iter = wcschr(data, '%'); while(iter) { @@ -164,7 +156,7 @@ static HRESULT do_preprocess(const Registrar *This, LPCOLESTR data, strbuf *buf) return DISP_E_EXCEPTION;
if(iter == iter2) { - strbuf_write(wstr, buf, 1); + strbuf_write(L"%", buf, 1); }else { for(rep_iter = This->rep; rep_iter; rep_iter = rep_iter->next) { if(rep_iter->key_len == iter-iter2 @@ -205,11 +197,6 @@ static HRESULT do_process_key(LPCOLESTR *pstr, HKEY parent_key, strbuf *buf, BOO DO_DELETE } key_type = NORMAL;
- static const WCHAR wstrNoRemove[] = {'N','o','R','e','m','o','v','e',0}; - static const WCHAR wstrForceRemove[] = {'F','o','r','c','e','R','e','m','o','v','e',0}; - static const WCHAR wstrDelete[] = {'D','e','l','e','t','e',0}; - static const WCHAR wstrval[] = {'v','a','l',0}; - iter = *pstr; hres = get_word(&iter, buf); if(FAILED(hres)) @@ -218,13 +205,13 @@ static HRESULT do_process_key(LPCOLESTR *pstr, HKEY parent_key, strbuf *buf, BOO
while(buf->str[1] || buf->str[0] != '}') { key_type = NORMAL; - if(!lstrcmpiW(buf->str, wstrNoRemove)) + if(!lstrcmpiW(buf->str, L"NoRemove")) key_type = NO_REMOVE; - else if(!lstrcmpiW(buf->str, wstrForceRemove)) + else if(!lstrcmpiW(buf->str, L"ForceRemove")) key_type = FORCE_REMOVE; - else if(!lstrcmpiW(buf->str, wstrval)) + else if(!lstrcmpiW(buf->str, L"val")) key_type = IS_VAL; - else if(!lstrcmpiW(buf->str, wstrDelete)) + else if(!lstrcmpiW(buf->str, L"Delete")) key_type = DO_DELETE;
if(key_type != NORMAL) { @@ -716,9 +703,6 @@ HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE inst, LPCOLESTR res, IRegistrar *registrar; HRESULT hres;
- static const WCHAR moduleW[] = {'M','O','D','U','L','E',0}; - static const WCHAR registryW[] = {'R','E','G','I','S','T','R','Y',0}; - if(!GetModuleFileNameW(inst, module_name, MAX_PATH)) { FIXME("hinst %p: did not get module name\n", inst); return E_FAIL; @@ -735,15 +719,15 @@ HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE inst, LPCOLESTR res, return hres; }
- IRegistrar_AddReplacement(registrar, moduleW, module_name); + IRegistrar_AddReplacement(registrar, L"MODULE", module_name);
for (iter = pMapEntries; iter && iter->szKey; iter++) IRegistrar_AddReplacement(registrar, iter->szKey, iter->szData);
if(bRegister) - hres = IRegistrar_ResourceRegisterSz(registrar, module_name, res, registryW); + hres = IRegistrar_ResourceRegisterSz(registrar, module_name, res, L"REGISTRY"); else - hres = IRegistrar_ResourceUnregisterSz(registrar, module_name, res, registryW); + hres = IRegistrar_ResourceUnregisterSz(registrar, module_name, res, L"REGISTRY");
if(registrar != pReg) IRegistrar_Release(registrar); diff --git a/dlls/atl/tests/atl_ax.c b/dlls/atl/tests/atl_ax.c index 6b944d1b285..94db3640ee3 100644 --- a/dlls/atl/tests/atl_ax.c +++ b/dlls/atl/tests/atl_ax.c @@ -115,7 +115,6 @@ static void test_ax_win(void) { BOOL ret; WNDCLASSEXW wcex; - static const WCHAR AtlAxWin[] = {'A','t','l','A','x','W','i','n',0}; static HMODULE hinstance = 0;
ret = AtlAxWinInit(); @@ -124,7 +123,7 @@ static void test_ax_win(void) hinstance = GetModuleHandleA(NULL); memset(&wcex, 0, sizeof(wcex)); wcex.cbSize = sizeof(wcex); - ret = GetClassInfoExW(hinstance, AtlAxWin, &wcex); + ret = GetClassInfoExW(hinstance, L"AtlAxWin", &wcex); ok(ret, "AtlAxWin has not registered\n"); ok(wcex.style == CS_GLOBALCLASS, "wcex.style %08x\n", wcex.style); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=79994
Your paranoid android.
=== debiant (32 bit report) ===
atl100: atl.c:696: Test failed: L"AtlAxWin100" has not registered atl.c:697: Test failed: wcex.style 00000000 atl.c:701: Test failed: CreateWindow failed! atl.c:710: Test failed: CreateWindow failed! atl.c:719: Test succeeded inside todo block: returned 00000000 atl.c:723: Test failed: CreateWindow failed! atl.c:726: Test failed: AtlAxGetControl failed with res 80004005 atl.c:727: Test failed: AtlAxGetControl failed! Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x004021c1).
atl80: atl.c:48: Test failed: AtlAxWin80 has not registered atl.c:49: Test failed: wcex.style 00000000 atl.c:54: Test failed: AtlAxWinLic80 has not registered atl.c:55: Test failed: wcex.style 00000000
Report validation errors: atl100:atl crashed (c0000005)
=== debiant (32 bit Chinese:China report) ===
atl100: atl.c:696: Test failed: L"AtlAxWin100" has not registered atl.c:697: Test failed: wcex.style 00000000 atl.c:701: Test failed: CreateWindow failed! atl.c:710: Test failed: CreateWindow failed! atl.c:719: Test succeeded inside todo block: returned 00000000 atl.c:723: Test failed: CreateWindow failed! atl.c:726: Test failed: AtlAxGetControl failed with res 80004005 atl.c:727: Test failed: AtlAxGetControl failed! Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x004021c1).
atl80: atl.c:48: Test failed: AtlAxWin80 has not registered atl.c:49: Test failed: wcex.style 00000000 atl.c:54: Test failed: AtlAxWinLic80 has not registered atl.c:55: Test failed: wcex.style 00000000
Report validation errors: atl100:atl crashed (c0000005)
=== debiant (32 bit WoW report) ===
atl100: atl.c:696: Test failed: L"AtlAxWin100" has not registered atl.c:697: Test failed: wcex.style 00000000 atl.c:701: Test failed: CreateWindow failed! atl.c:710: Test failed: CreateWindow failed! atl.c:719: Test succeeded inside todo block: returned 00000000 atl.c:723: Test failed: CreateWindow failed! atl.c:726: Test failed: AtlAxGetControl failed with res 80004005 atl.c:727: Test failed: AtlAxGetControl failed! Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x004021c1).
atl80: atl.c:48: Test failed: AtlAxWin80 has not registered atl.c:49: Test failed: wcex.style 00000000 atl.c:54: Test failed: AtlAxWinLic80 has not registered atl.c:55: Test failed: wcex.style 00000000
Report validation errors: atl100:atl crashed (c0000005)
=== debiant (64 bit WoW report) ===
atl100: atl.c:696: Test failed: L"AtlAxWin100" has not registered atl.c:697: Test failed: wcex.style 00000000 atl.c:701: Test failed: CreateWindow failed! atl.c:710: Test failed: CreateWindow failed! atl.c:719: Test succeeded inside todo block: returned 00000000 atl.c:723: Test failed: CreateWindow failed! atl.c:726: Test failed: AtlAxGetControl failed with res 80004005 atl.c:727: Test failed: AtlAxGetControl failed! Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x004021c1).
atl80: atl.c:48: Test failed: AtlAxWin80 has not registered atl.c:49: Test failed: wcex.style 00000000 atl.c:54: Test failed: AtlAxWinLic80 has not registered atl.c:55: Test failed: wcex.style 00000000
Report validation errors: atl100:atl crashed (c0000005)