[v2 1/2] kernel32/tests: resource: Replicate muirct.exe behavior
Zhiyi Zhang
zzhang at codeweavers.com
Tue Jul 10 02:28:28 CDT 2018
On Mon 7 9 12:58, Jon Doron wrote:
> For some reason muirct.exe is aware of the opaque structure used by
> BeginUpdateResource, it access the filename field of the opaque structure
> during it's processing.
>
> MS documentation for the muirct utility:
> https://docs.microsoft.com/en-us/windows/desktop/intl/resource-utilities
>
> Sample execution:
> MUIRCT.EXE -c "ui.exe" -e "de-DE\ui.exe.mui"
>
> Signed-off-by: Jon Doron <arilou at gmail.com>
> ---
> dlls/kernel32/tests/resource.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/dlls/kernel32/tests/resource.c b/dlls/kernel32/tests/resource.c
> index 74066cfba3..6db9655833 100644
> --- a/dlls/kernel32/tests/resource.c
> +++ b/dlls/kernel32/tests/resource.c
> @@ -24,6 +24,7 @@
> #include "wine/test.h"
>
> static const char filename[] = "test_.exe";
> +static const wchar_t filenameW[] = L"test_.exe";
Hi, please don't use L"" to define a wchar string.
Checkout https://wiki.winehq.org/Developer_Hints#Using_only_C89-compliant_code
> static DWORD GLE;
>
> enum constants {
> @@ -463,6 +464,28 @@ static void test_find_resource(void)
> ok( GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND, "wrong error %u\n", GetLastError() );
> }
>
> +static void test_muirct_compatiblity(void)
> +{
> + HANDLE res = NULL;
The NULL initialization is not necessary.
> + PVOID res_data;
> + PWCHAR res_filename;
res_filenameW is more appropriate.
Write VOID * instead of PVOID
See https://wiki.winehq.org/Submitting_Patches#Code_guidelines.
> +> + res = BeginUpdateResourceW( (PWCHAR)filenameW, FALSE );
> + ok( res != NULL, "BeginUpdateResourceW failed\n" );
> + res_data = GlobalLock(res);
> + ok( res_data != NULL, "GlobalLock failed\n" );
> +#ifdef _WIN64
> + res_filename = (PWCHAR)GlobalLock( *(HGLOBAL*)((ULONG_PTR)res_data + 0x30) );
> +#else
> + res_filename = (PWCHAR)GlobalLock( *(HGLOBAL*)((ULONG_PTR)res_data + 0x18) );
> +#endif
> + ok( res_filename != NULL, "GlobalLock for res_filename failed\n" );
> + ok( !lstrcmpW(res_filename, (PWCHAR)filenameW), "Filename fields do not match\n" );
> + ok( GlobalUnlock( res_filename ), "GlobalUnlock res_filenamed failed\n" );
Typo res_filenamed
> + ok( GlobalUnlock( res_data ), "GlobalUnlock res_data failed\n" );
Missing a GlobalUnlock(res)?
Thanks,
Zhiyi
> + ok( EndUpdateResourceW( res, TRUE ), "EndUpdateResourceW failed\n");
> +}
> +
> START_TEST(resource)
> {
> DWORD i;
> @@ -482,6 +505,7 @@ START_TEST(resource)
> {
> const struct _sec_variants *sec = &sec_variants[i];
> build_exe( &sec->build );
> + test_muirct_compatiblity();
> update_resources_none();
> check_exe( &sec->chk_none );
> update_resources_delete();
>
More information about the wine-devel
mailing list