Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2018
- 68 participants
- 583 discussions
28 Jun '18
Signed-off-by: Lucian Poston <lucianposton(a)pm.me>
---
dlls/dwrite/tests/layout.c | 278 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 278 insertions(+)
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index ac36aff5b5..2b665fd74e 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -4491,6 +4491,7 @@ static void test_SetWordWrapping(void)
/* Collection dedicated to fallback testing */
static const WCHAR g_blahfontW[] = {'B','l','a','h',0};
+static const WCHAR g_fontNotInCollectionW[] = {'n','o','t','B','l','a','h',0};
static HRESULT WINAPI fontcollection_QI(IDWriteFontCollection *iface, REFIID riid, void **obj)
{
if (IsEqualIID(riid, &IID_IDWriteFontCollection) || IsEqualIID(riid, &IID_IUnknown)) {
@@ -4550,6 +4551,9 @@ static HRESULT WINAPI fontcollection_FindFamilyName(IDWriteFontCollection *iface
*index = 123456;
*exists = TRUE;
return S_OK;
+ } else if (!lstrcmpW(name, g_fontNotInCollectionW)) {
+ *exists = FALSE;
+ return S_OK;
}
ok(0, "unexpected call, name %s\n", wine_dbgstr_w(name));
return E_NOTIMPL;
@@ -5570,6 +5574,279 @@ static void test_GetOverhangMetrics(void)
IDWriteFactory_Release(factory);
}
+static void test_GetMetrics_with_custom_fontcollection(void)
+{
+ static const WCHAR emptystringW[] = {0};
+ static const WCHAR mappedW[] = {'a','b','c','d',0};
+ static const WCHAR notmappedW[] = {'a',0xffff,'b',0}; // u+ffff = not a unicode character
+ DWRITE_CLUSTER_METRICS clusters[4];
+ DWRITE_TEXT_METRICS metrics;
+ IDWriteTextFormat *format;
+ IDWriteTextLayout *layout;
+ IDWriteFactory *factory;
+ UINT32 count, i;
+ FLOAT width;
+ HRESULT hr;
+
+ factory = create_factory();
+
+ /* font is in font collection */
+ hr = IDWriteFactory_CreateTextFormat(factory, g_blahfontW, &fallbackcollection,
+ DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STRETCH_NORMAL, 10.0, enusW, &format);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* text is mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, mappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* text is not mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, notmappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* zero-length empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 0, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 0, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ IDWriteTextFormat_Release(format);
+
+ /* font not in font collection */
+ hr = IDWriteFactory_CreateTextFormat(factory, g_fontNotInCollectionW, &fallbackcollection,
+ DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STRETCH_NORMAL, 10.0, enusW, &format);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* text is mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, mappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* text is not mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, notmappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* zero-length empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 0, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 0, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ IDWriteTextFormat_Release(format);
+
+ IDWriteFactory_Release(factory);
+}
+
START_TEST(layout)
{
IDWriteFactory *factory;
@@ -5603,6 +5880,7 @@ START_TEST(layout)
test_SetFontStretch();
test_SetStrikethrough();
test_GetMetrics();
+ test_GetMetrics_with_custom_fontcollection();
test_SetFlowDirection();
test_SetDrawingEffect();
test_GetLineMetrics();
--
2.16.4
2
1
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
include/d3d12.idl | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/d3d12.idl b/include/d3d12.idl
index 69220e674cd7..43e9c2dca3bb 100644
--- a/include/d3d12.idl
+++ b/include/d3d12.idl
@@ -944,7 +944,7 @@ typedef struct D3D12_TEXCUBE_ARRAY_SRV
{
UINT MostDetailedMip;
UINT MipLevels;
- UINT First2DArraySlice;
+ UINT First2DArrayFace;
UINT NumCubes;
FLOAT ResourceMinLODClamp;
} D3D12_TEXCUBE_ARRAY_SRV;
@@ -2172,7 +2172,7 @@ interface ID3D12RootSignatureDeserializer : IUnknown
ID3DBlob **blob, ID3DBlob **error_blob);
typedef HRESULT (__stdcall *PFN_D3D12_CREATE_DEVICE)(IUnknown *adapter,
- D3D_FEATURE_LEVEL minmum_feature_level, REFIID iid, void **device);
+ D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device);
[local] HRESULT __stdcall D3D12CreateDevice(IUnknown *adapter,
D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device);
--
2.16.4
2
1
27 Jun '18
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/kernel32/tests/actctx.c | 30 +++++++--------
dlls/kernel32/tests/atom.c | 4 +-
dlls/kernel32/tests/codepage.c | 64 +++++++++++++++----------------
dlls/kernel32/tests/comm.c | 4 +-
dlls/kernel32/tests/console.c | 68 ++++++++++++++++-----------------
dlls/kernel32/tests/file.c | 38 +++++++++----------
dlls/kernel32/tests/heap.c | 2 +-
dlls/kernel32/tests/loader.c | 18 ++++-----
dlls/kernel32/tests/module.c | 13 ++++---
dlls/kernel32/tests/path.c | 86 +++++++++++++++++++++---------------------
dlls/kernel32/tests/pipe.c | 5 +--
dlls/kernel32/tests/process.c | 10 ++---
dlls/kernel32/tests/profile.c | 12 +++---
dlls/kernel32/tests/resource.c | 2 +-
dlls/kernel32/tests/thread.c | 2 +-
dlls/kernel32/tests/version.c | 2 +-
dlls/kernel32/tests/virtual.c | 20 +++++-----
dlls/kernel32/tests/volume.c | 4 +-
18 files changed, 191 insertions(+), 193 deletions(-)
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
index 8c9ac79db3..96d9b8cbb6 100644
--- a/dlls/kernel32/tests/actctx.c
+++ b/dlls/kernel32/tests/actctx.c
@@ -533,7 +533,7 @@ static int strcmp_aw(LPCWSTR strw, const char *stra)
WCHAR buf[1024];
if (!stra) return 1;
- MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, ARRAY_SIZE(buf));
return lstrcmpW(strw, buf);
}
@@ -550,7 +550,7 @@ static BOOL create_manifest_file(const char *filename, const char *manifest, int
WCHAR path[MAX_PATH];
MultiByteToWideChar( CP_ACP, 0, filename, -1, path, MAX_PATH );
- GetFullPathNameW(path, sizeof(manifest_path)/sizeof(WCHAR), manifest_path, NULL);
+ GetFullPathNameW(path, ARRAY_SIZE(manifest_path), manifest_path, NULL);
if (manifest_len == -1)
manifest_len = strlen(manifest);
@@ -566,7 +566,7 @@ static BOOL create_manifest_file(const char *filename, const char *manifest, int
if (depmanifest)
{
MultiByteToWideChar( CP_ACP, 0, depfile, -1, path, MAX_PATH );
- GetFullPathNameW(path, sizeof(depmanifest_path)/sizeof(WCHAR), depmanifest_path, NULL);
+ GetFullPathNameW(path, ARRAY_SIZE(depmanifest_path), depmanifest_path, NULL);
file = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
@@ -2558,7 +2558,7 @@ static void init_paths(void)
static const WCHAR backslash[] = {'\\',0};
static const WCHAR subdir[] = {'T','e','s','t','S','u','b','d','i','r','\\',0};
- GetModuleFileNameW(NULL, exe_path, sizeof(exe_path)/sizeof(WCHAR));
+ GetModuleFileNameW(NULL, exe_path, ARRAY_SIZE(exe_path));
lstrcpyW(app_dir, exe_path);
for(ptr=app_dir+lstrlenW(app_dir); *ptr != '\\' && *ptr != '/'; ptr--);
ptr[1] = 0;
@@ -2570,7 +2570,7 @@ static void init_paths(void)
lstrcpyW(work_dir_subdir, work_dir);
lstrcatW(work_dir_subdir, subdir);
- GetModuleFileNameW(NULL, app_manifest_path, sizeof(app_manifest_path)/sizeof(WCHAR));
+ GetModuleFileNameW(NULL, app_manifest_path, ARRAY_SIZE(app_manifest_path));
lstrcpyW(app_manifest_path+lstrlenW(app_manifest_path), dot_manifest);
}
@@ -2580,7 +2580,7 @@ static void write_manifest(const char *filename, const char *manifest)
DWORD size;
CHAR path[MAX_PATH];
- GetTempPathA(sizeof(path)/sizeof(CHAR), path);
+ GetTempPathA(ARRAY_SIZE(path), path);
strcat(path, filename);
file = CreateFileA(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
@@ -2593,7 +2593,7 @@ static void delete_manifest_file(const char *filename)
{
CHAR path[MAX_PATH];
- GetTempPathA(sizeof(path)/sizeof(CHAR), path);
+ GetTempPathA(ARRAY_SIZE(path), path);
strcat(path, filename);
DeleteFileA(path);
}
@@ -2604,7 +2604,7 @@ static void test_CreateActCtx(void)
ACTCTXA actctx;
HANDLE handle;
- GetTempPathA(sizeof(path)/sizeof(CHAR), path);
+ GetTempPathA(ARRAY_SIZE(path), path);
strcat(path, "main_wndcls.manifest");
write_manifest("testdep1.manifest", manifest_wndcls1);
@@ -2621,7 +2621,7 @@ static void test_CreateActCtx(void)
pReleaseActCtx(handle);
/* with specified directory, that doesn't contain dependent assembly */
- GetWindowsDirectoryA(dir, sizeof(dir)/sizeof(CHAR));
+ GetWindowsDirectoryA(dir, ARRAY_SIZE(dir));
memset(&actctx, 0, sizeof(ACTCTXA));
actctx.cbSize = sizeof(ACTCTXA);
@@ -2667,7 +2667,7 @@ todo_wine
/* load manifest from lpAssemblyDirectory directory */
write_manifest("testdir.manifest", manifest1);
- GetTempPathA(sizeof(path)/sizeof(path[0]), path);
+ GetTempPathA(ARRAY_SIZE(path), path);
SetCurrentDirectoryA(path);
strcat(path, "assembly_dir");
strcpy(dir, path);
@@ -3048,14 +3048,14 @@ static void test_settings(void)
ret = pQueryActCtxSettingsW( 0, handle, namespace2005W, dpiAwareW, buffer, 80, &size );
ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() );
ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) );
- ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size );
+ ok( size == ARRAY_SIZE(trueW), "wrong len %lu\n", size );
SetLastError( 0xdeadbeef );
size = 0xdead;
memset( buffer, 0xcc, sizeof(buffer) );
ret = pQueryActCtxSettingsW( 0, handle, namespace2005W, dpiAwareW, buffer, lstrlenW(trueW) + 1, &size );
ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() );
ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) );
- ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size );
+ ok( size == ARRAY_SIZE(trueW), "wrong len %lu\n", size );
SetLastError( 0xdeadbeef );
size = 0xdead;
memset( buffer, 0xcc, sizeof(buffer) );
@@ -3087,7 +3087,7 @@ static void test_settings(void)
if (ret)
{
ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) );
- ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size );
+ ok( size == ARRAY_SIZE(trueW), "wrong len %lu\n", size );
}
else ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) );
SetLastError( 0xdeadbeef );
@@ -3096,7 +3096,7 @@ static void test_settings(void)
ret = pQueryActCtxSettingsW( 0, handle, NULL, dpiAwareW, buffer, lstrlenW(trueW), &size );
ok( ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() );
ok( !lstrcmpW( buffer, trueW ), "got %s\n", wine_dbgstr_w(buffer) );
- ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size );
+ ok( size == ARRAY_SIZE(trueW), "wrong len %lu\n", size );
SetLastError( 0xdeadbeef );
size = 0xdead;
memset( buffer, 0xcc, sizeof(buffer) );
@@ -3104,7 +3104,7 @@ static void test_settings(void)
ok( !ret, "QueryActCtxSettingsW failed err %u\n", GetLastError() );
ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "wrong error %u\n", GetLastError() );
ok( buffer[0] == 0xcccc, "got %s\n", wine_dbgstr_w(buffer) );
- ok( size == sizeof(trueW)/sizeof(WCHAR), "wrong len %lu\n", size );
+ ok( size == ARRAY_SIZE(trueW), "wrong len %lu\n", size );
pReleaseActCtx(handle);
create_manifest_file( "manifest_settings2.manifest", settings_manifest2, -1, NULL, NULL );
diff --git a/dlls/kernel32/tests/atom.c b/dlls/kernel32/tests/atom.c
index 0c1740869a..ad9e91ba25 100644
--- a/dlls/kernel32/tests/atom.c
+++ b/dlls/kernel32/tests/atom.c
@@ -276,7 +276,7 @@ static void test_get_atom_name(void)
do_initW(inW, "abcdefghij", 255);
atom = GlobalAddAtomW(inW);
ok(atom, "couldn't add atom for %s\n", in);
- len = GlobalGetAtomNameW(atom, outW, sizeof(outW)/sizeof(outW[0]));
+ len = GlobalGetAtomNameW(atom, outW, ARRAY_SIZE(outW));
ok(len == 255, "length mismatch (%u instead of 255)\n", len);
for (i = 0; i < 255; i++)
{
@@ -537,7 +537,7 @@ static void test_local_get_atom_name(void)
do_initW(inW, "abcdefghij", 255);
atom = AddAtomW(inW);
ok(atom, "couldn't add atom for %s\n", in);
- len = GetAtomNameW(atom, outW, sizeof(outW)/sizeof(outW[0]));
+ len = GetAtomNameW(atom, outW, ARRAY_SIZE(outW));
ok(len == 255, "length mismatch (%u instead of 255)\n", len);
for (i = 0; i < 255; i++)
{
diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c
index 7389d93276..b15a3a10a7 100644
--- a/dlls/kernel32/tests/codepage.c
+++ b/dlls/kernel32/tests/codepage.c
@@ -205,7 +205,7 @@ static void test_other_invalid_parameters(void)
char c_string[] = "Hello World";
size_t c_string_len = sizeof(c_string);
WCHAR w_string[] = {'H','e','l','l','o',' ','W','o','r','l','d',0};
- size_t w_string_len = sizeof(w_string) / sizeof(WCHAR);
+ size_t w_string_len = ARRAY_SIZE(w_string);
BOOL used;
INT len;
@@ -683,7 +683,7 @@ static void test_utf7_encoding(void)
i, expected_len, expected_len, output[expected_len]);
}
- for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(tests); i++)
{
memset(output, '#', sizeof(output) - 1);
output[sizeof(output) - 1] = 0;
@@ -746,12 +746,12 @@ static void test_utf7_decoding(void)
{
/* tests string conversion with srclen=-1 */
{
- "+T2BZfQ-", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2BZfQ-", -1, output, ARRAY_SIZE(output) - 1,
{0x4F60,0x597D,0}, 3, 3
},
/* tests string conversion with srclen=-2 */
{
- "+T2BZfQ-", -2, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2BZfQ-", -2, output, ARRAY_SIZE(output) - 1,
{0x4F60,0x597D,0}, 3, 3
},
/* tests string conversion with dstlen=strlen(expected_dst) */
@@ -781,72 +781,72 @@ static void test_utf7_decoding(void)
},
/* tests ill-formed UTF-7: 6 bits, not enough for a byte pair */
{
- "+T-+T-+T-hello", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T-+T-+T-hello", -1, output, ARRAY_SIZE(output) - 1,
{'h','e','l','l','o',0}, 6, 6
},
/* tests ill-formed UTF-7: 12 bits, not enough for a byte pair */
{
- "+T2-+T2-+T2-hello", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2-+T2-+T2-hello", -1, output, ARRAY_SIZE(output) - 1,
{'h','e','l','l','o',0}, 6, 6
},
/* tests ill-formed UTF-7: 18 bits, not a multiple of 16 and the last bit is a 1 */
{
- "+T2B-+T2B-+T2B-hello", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2B-+T2B-+T2B-hello", -1, output, ARRAY_SIZE(output) - 1,
{0x4F60,0x4F60,0x4F60,'h','e','l','l','o',0}, 9, 9
},
/* tests ill-formed UTF-7: 24 bits, a multiple of 8 but not a multiple of 16 */
{
- "+T2BZ-+T2BZ-+T2BZ-hello", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2BZ-+T2BZ-+T2BZ-hello", -1, output, ARRAY_SIZE(output) - 1,
{0x4F60,0x4F60,0x4F60,'h','e','l','l','o',0}, 9, 9
},
/* tests UTF-7 followed by characters that should be encoded but aren't */
{
- "+T2BZ-\x82\xFE", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2BZ-\x82\xFE", -1, output, ARRAY_SIZE(output) - 1,
{0x4F60,0x0082,0x00FE,0}, 4, 4
},
/* tests srclen > strlen(src) */
{
- "a\0b", 4, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "a\0b", 4, output, ARRAY_SIZE(output) - 1,
{'a',0,'b',0}, 4, 4
},
/* tests srclen < strlen(src) outside of a UTF-7 sequence */
{
- "hello", 2, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "hello", 2, output, ARRAY_SIZE(output) - 1,
{'h','e'}, 2, 2
},
/* tests srclen < strlen(src) inside of a UTF-7 sequence */
{
- "+T2BZfQ-", 4, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2BZfQ-", 4, output, ARRAY_SIZE(output) - 1,
{0x4F60}, 1, 1
},
/* tests srclen < strlen(src) right at the beginning of a UTF-7 sequence */
{
- "hi+T2A-", 3, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "hi+T2A-", 3, output, ARRAY_SIZE(output) - 1,
{'h','i'}, 2, 2
},
/* tests srclen < strlen(src) right at the end of a UTF-7 sequence */
{
- "+T2A-hi", 5, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+T2A-hi", 5, output, ARRAY_SIZE(output) - 1,
{0x4F60}, 1, 1
},
/* tests srclen < strlen(src) at the beginning of an escaped + sign */
{
- "hi+-", 3, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "hi+-", 3, output, ARRAY_SIZE(output) - 1,
{'h','i'}, 2, 2
},
/* tests srclen < strlen(src) at the end of an escaped + sign */
{
- "+-hi", 2, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+-hi", 2, output, ARRAY_SIZE(output) - 1,
{'+'}, 1, 1
},
/* tests len=0 but no error */
{
- "+", 1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "+", 1, output, ARRAY_SIZE(output) - 1,
{}, 0, 0
},
/* tests a single null char */
{
- "", -1, output, sizeof(output) / sizeof(WCHAR) - 1,
+ "", -1, output, ARRAY_SIZE(output) - 1,
{0}, 1, 1
},
/* tests a buffer that runs out while not decoding a UTF-7 sequence */
@@ -867,9 +867,9 @@ static void test_utf7_decoding(void)
sprintf(input, "+%c+AAA", i);
memset(output, 0x23, sizeof(output) - sizeof(WCHAR));
- output[sizeof(output) / sizeof(WCHAR) - 1] = 0;
+ output[ARRAY_SIZE(output) - 1] = 0;
- len = MultiByteToWideChar(CP_UTF7, 0, input, 7, output, sizeof(output) / sizeof(WCHAR) - 1);
+ len = MultiByteToWideChar(CP_UTF7, 0, input, 7, output, ARRAY_SIZE(output) - 1);
if (i == '-')
{
@@ -909,9 +909,9 @@ static void test_utf7_decoding(void)
sprintf(input, "+B%c+AAA", i);
memset(output, 0x23, sizeof(output) - sizeof(WCHAR));
- output[sizeof(output) / sizeof(WCHAR) - 1] = 0;
+ output[ARRAY_SIZE(output) - 1] = 0;
- len = MultiByteToWideChar(CP_UTF7, 0, input, 8, output, sizeof(output) / sizeof(WCHAR) - 1);
+ len = MultiByteToWideChar(CP_UTF7, 0, input, 8, output, ARRAY_SIZE(output) - 1);
if (i == '-')
{
@@ -955,10 +955,10 @@ static void test_utf7_decoding(void)
i, wine_dbgstr_wn(expected, expected_len + 1), wine_dbgstr_wn(output, expected_len + 1));
}
- for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(tests); i++)
{
memset(output, 0x23, sizeof(output) - sizeof(WCHAR));
- output[sizeof(output) / sizeof(WCHAR) - 1] = 0;
+ output[ARRAY_SIZE(output) - 1] = 0;
SetLastError(0xdeadbeef);
len = MultiByteToWideChar(CP_UTF7, 0, tests[i].src, tests[i].srclen,
@@ -1004,7 +1004,7 @@ static void test_undefined_byte_char(void)
};
INT i, ret;
- for (i = 0; i < (sizeof(testset) / sizeof(testset[0])); i++) {
+ for (i = 0; i < ARRAY_SIZE(testset); i++) {
if (! IsValidCodePage(testset[i].codepage))
{
skip("Codepage %d not available\n", testset[i].codepage);
@@ -1106,7 +1106,7 @@ static void test_threadcp(void)
last = GetThreadLocale();
acp = GetACP();
- for (i = 0; i < sizeof(lcids)/sizeof(lcids[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(lcids); i++)
{
SetThreadLocale(lcids[i].lcid);
@@ -1151,7 +1151,7 @@ static void test_threadcp(void)
}
/* IsDBCSLeadByteEx - locales without codepage */
- for (i = 0; i < sizeof(isleads_nocp)/sizeof(isleads_nocp[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(isleads_nocp); i++)
{
SetThreadLocale(isleads_nocp[i].lcid);
@@ -1163,7 +1163,7 @@ static void test_threadcp(void)
}
/* IsDBCSLeadByteEx - locales with codepage */
- for (i = 0; i < sizeof(isleads)/sizeof(isleads[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(isleads); i++)
{
SetThreadLocale(isleads[i].lcid);
@@ -1194,7 +1194,7 @@ static void test_dbcs_to_widechar(void)
MB_COMPOSITE |MB_ERR_INVALID_CHARS|MB_USEGLYPHCHARS,
};
- for (i = 0; i < sizeof(flags)/sizeof(DWORD); ++i)
+ for (i = 0; i < ARRAY_SIZE(flags); ++i)
{
memset(wbuf, 0xff, sizeof(wbuf));
count = MultiByteToWideChar(936, flags[i], (char*)&buf[0], 2, NULL, 0);
@@ -1206,7 +1206,7 @@ static void test_dbcs_to_widechar(void)
ok(wbuf[1] == 0xffff, "%04x: returned %04x (expected ffff)\n", flags[i], wbuf[1]);
}
- for (i = 0; i < sizeof(flags)/sizeof(DWORD); ++i)
+ for (i = 0; i < ARRAY_SIZE(flags); ++i)
{
memset(wbuf, 0xff, sizeof(wbuf));
count = MultiByteToWideChar(936, flags[i], (char*)&buf[0], 3, NULL, 0);
@@ -1232,7 +1232,7 @@ static void test_dbcs_to_widechar(void)
}
/* src ends with null character */
- for (i = 0; i < sizeof(flags)/sizeof(DWORD); ++i)
+ for (i = 0; i < ARRAY_SIZE(flags); ++i)
{
memset(wbuf, 0xff, sizeof(wbuf));
count = MultiByteToWideChar(936, flags[i], (char*)&buf[0], 4, NULL, 0);
@@ -1261,7 +1261,7 @@ static void test_dbcs_to_widechar(void)
}
/* src has null character, but not ends with it */
- for (i = 0; i < sizeof(flags)/sizeof(DWORD); ++i)
+ for (i = 0; i < ARRAY_SIZE(flags); ++i)
{
memset(wbuf, 0xff, sizeof(wbuf));
count = MultiByteToWideChar(936, flags[i], (char*)&buf[0], 5, NULL, 0);
diff --git a/dlls/kernel32/tests/comm.c b/dlls/kernel32/tests/comm.c
index d671e40f87..97a71358fe 100644
--- a/dlls/kernel32/tests/comm.c
+++ b/dlls/kernel32/tests/comm.c
@@ -580,7 +580,7 @@ static void test_BuildCommDCBW(const char *string, const TEST *ptest, int initia
WCHAR wide_string[sizeof(ptest->string)];
static int reportedDCBW = 0;
- MultiByteToWideChar(CP_ACP, 0, string, -1, wide_string, sizeof(wide_string) / sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, string, -1, wide_string, ARRAY_SIZE(wide_string));
/* set initial conditions */
memset(&dcb, initial_value, sizeof(DCB));
@@ -608,7 +608,7 @@ static void test_BuildCommDCBAndTimeoutsW(const char *string, const TEST *ptest,
WCHAR wide_string[sizeof(ptest->string)];
static int reportedDCBAndTW = 0;
- MultiByteToWideChar(CP_ACP, 0, string, -1, wide_string, sizeof(wide_string) / sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, string, -1, wide_string, ARRAY_SIZE(wide_string));
/* set initial conditions */
memset(&dcb, initial_value, sizeof(DCB));
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 926c052686..ac77ab76b0 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -982,7 +982,7 @@ static void test_GetSetConsoleInputExeName(void)
GetModuleFileNameA(GetModuleHandleA(NULL), module, sizeof(module));
p = strrchr(module, '\\') + 1;
- ret = pGetConsoleInputExeNameA(sizeof(buffer)/sizeof(buffer[0]), buffer);
+ ret = pGetConsoleInputExeNameA(ARRAY_SIZE(buffer), buffer);
ok(ret, "GetConsoleInputExeNameA failed\n");
todo_wine ok(!lstrcmpA(buffer, p), "got %s expected %s\n", buffer, p);
@@ -1001,7 +1001,7 @@ static void test_GetSetConsoleInputExeName(void)
ret = pSetConsoleInputExeNameA(input_exe);
ok(ret, "SetConsoleInputExeNameA failed\n");
- ret = pGetConsoleInputExeNameA(sizeof(buffer)/sizeof(buffer[0]), buffer);
+ ret = pGetConsoleInputExeNameA(ARRAY_SIZE(buffer), buffer);
ok(ret, "GetConsoleInputExeNameA failed\n");
ok(!lstrcmpA(buffer, input_exe), "got %s expected %s\n", buffer, input_exe);
}
@@ -1074,7 +1074,7 @@ static void test_OpenCON(void)
unsigned i;
HANDLE h;
- for (i = 0; i < sizeof(accesses) / sizeof(accesses[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(accesses); i++)
{
h = CreateFileW(conW, GENERIC_WRITE, 0, NULL, accesses[i], 0, NULL);
ok(h != INVALID_HANDLE_VALUE || broken(accesses[i] == TRUNCATE_EXISTING /* Win8 */),
@@ -1179,7 +1179,7 @@ static void test_OpenConsoleW(void)
return;
}
- for (index = 0; index < sizeof(invalid_table)/sizeof(invalid_table[0]); index++)
+ for (index = 0; index < ARRAY_SIZE(invalid_table); index++)
{
SetLastError(0xdeadbeef);
ret = pOpenConsoleW(invalid_table[index].name, invalid_table[index].access,
@@ -1193,7 +1193,7 @@ static void test_OpenConsoleW(void)
invalid_table[index].gle, invalid_table[index].gle2, index, gle);
}
- for (index = 0; index < sizeof(valid_table)/sizeof(valid_table[0]); index++)
+ for (index = 0; index < ARRAY_SIZE(valid_table); index++)
{
ret = pOpenConsoleW(valid_table[index].name, valid_table[index].access,
valid_table[index].inherit, valid_table[index].creation);
@@ -1248,7 +1248,7 @@ static void test_CreateFileW(void)
HANDLE ret;
SECURITY_ATTRIBUTES sa;
- for (index = 0; index < sizeof(cf_table)/sizeof(cf_table[0]); index++)
+ for (index = 0; index < ARRAY_SIZE(cf_table); index++)
{
SetLastError(0xdeadbeef);
@@ -1380,7 +1380,7 @@ static void test_GetNumberOfConsoleInputEvents(HANDLE input_handle)
{INVALID_HANDLE_VALUE, &count, ERROR_INVALID_HANDLE},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
SetLastError(0xdeadbeef);
if (invalid_table[i].nrofevents) count = 0xdeadbeef;
@@ -1481,7 +1481,7 @@ static void test_WriteConsoleInputA(HANDLE input_handle)
event.EventType = MOUSE_EVENT;
event.Event.MouseEvent = mouse_event;
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win_crash)
continue;
@@ -1541,31 +1541,31 @@ static void test_WriteConsoleInputA(HANDLE input_handle)
ret = FlushConsoleInputBuffer(input_handle);
ok(ret == TRUE, "Expected FlushConsoleInputBuffer to return TRUE, got %d\n", ret);
- for (i = 0; i < sizeof(event_list)/sizeof(event_list[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(event_list); i++)
{
event_list[i].EventType = MOUSE_EVENT;
event_list[i].Event.MouseEvent = mouse_event;
}
/* Writing consecutive chunks of mouse events appears to work. */
- ret = WriteConsoleInputA(input_handle, event_list, sizeof(event_list)/sizeof(event_list[0]), &count);
+ ret = WriteConsoleInputA(input_handle, event_list, ARRAY_SIZE(event_list), &count);
ok(ret == TRUE, "Expected WriteConsoleInputA to return TRUE, got %d\n", ret);
- ok(count == sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == ARRAY_SIZE(event_list),
"Expected count to be event list length, got %u\n", count);
ret = GetNumberOfConsoleInputEvents(input_handle, &count);
ok(ret == TRUE, "Expected GetNumberOfConsoleInputEvents to return TRUE, got %d\n", ret);
- ok(count == sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == ARRAY_SIZE(event_list),
"Expected count to be event list length, got %u\n", count);
- ret = WriteConsoleInputA(input_handle, event_list, sizeof(event_list)/sizeof(event_list[0]), &count);
+ ret = WriteConsoleInputA(input_handle, event_list, ARRAY_SIZE(event_list), &count);
ok(ret == TRUE, "Expected WriteConsoleInputA to return TRUE, got %d\n", ret);
- ok(count == sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == ARRAY_SIZE(event_list),
"Expected count to be event list length, got %u\n", count);
ret = GetNumberOfConsoleInputEvents(input_handle, &count);
ok(ret == TRUE, "Expected GetNumberOfConsoleInputEvents to return TRUE, got %d\n", ret);
- ok(count == 2*sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == 2*ARRAY_SIZE(event_list),
"Expected count to be twice event list length, got %u\n", count);
/* Again, writing a single mouse event with adjacent mouse events queued doesn't appear to affect the count. */
@@ -1576,7 +1576,7 @@ static void test_WriteConsoleInputA(HANDLE input_handle)
ret = GetNumberOfConsoleInputEvents(input_handle, &count);
ok(ret == TRUE, "Expected GetNumberOfConsoleInputEvents to return TRUE, got %d\n", ret);
todo_wine
- ok(count == 2*sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == 2*ARRAY_SIZE(event_list),
"Expected count to be twice event list length, got %u\n", count);
ret = FlushConsoleInputBuffer(input_handle);
@@ -1718,7 +1718,7 @@ static void test_WriteConsoleInputW(HANDLE input_handle)
event.EventType = MOUSE_EVENT;
event.Event.MouseEvent = mouse_event;
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win_crash)
continue;
@@ -1778,31 +1778,31 @@ static void test_WriteConsoleInputW(HANDLE input_handle)
ret = FlushConsoleInputBuffer(input_handle);
ok(ret == TRUE, "Expected FlushConsoleInputBuffer to return TRUE, got %d\n", ret);
- for (i = 0; i < sizeof(event_list)/sizeof(event_list[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(event_list); i++)
{
event_list[i].EventType = MOUSE_EVENT;
event_list[i].Event.MouseEvent = mouse_event;
}
/* Writing consecutive chunks of mouse events appears to work. */
- ret = WriteConsoleInputW(input_handle, event_list, sizeof(event_list)/sizeof(event_list[0]), &count);
+ ret = WriteConsoleInputW(input_handle, event_list, ARRAY_SIZE(event_list), &count);
ok(ret == TRUE, "Expected WriteConsoleInputW to return TRUE, got %d\n", ret);
- ok(count == sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == ARRAY_SIZE(event_list),
"Expected count to be event list length, got %u\n", count);
ret = GetNumberOfConsoleInputEvents(input_handle, &count);
ok(ret == TRUE, "Expected GetNumberOfConsoleInputEvents to return TRUE, got %d\n", ret);
- ok(count == sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == ARRAY_SIZE(event_list),
"Expected count to be event list length, got %u\n", count);
- ret = WriteConsoleInputW(input_handle, event_list, sizeof(event_list)/sizeof(event_list[0]), &count);
+ ret = WriteConsoleInputW(input_handle, event_list, ARRAY_SIZE(event_list), &count);
ok(ret == TRUE, "Expected WriteConsoleInputW to return TRUE, got %d\n", ret);
- ok(count == sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == ARRAY_SIZE(event_list),
"Expected count to be event list length, got %u\n", count);
ret = GetNumberOfConsoleInputEvents(input_handle, &count);
ok(ret == TRUE, "Expected GetNumberOfConsoleInputEvents to return TRUE, got %d\n", ret);
- ok(count == 2*sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == 2*ARRAY_SIZE(event_list),
"Expected count to be twice event list length, got %u\n", count);
/* Again, writing a single mouse event with adjacent mouse events queued doesn't appear to affect the count. */
@@ -1813,7 +1813,7 @@ static void test_WriteConsoleInputW(HANDLE input_handle)
ret = GetNumberOfConsoleInputEvents(input_handle, &count);
ok(ret == TRUE, "Expected GetNumberOfConsoleInputEvents to return TRUE, got %d\n", ret);
todo_wine
- ok(count == 2*sizeof(event_list)/sizeof(event_list[0]),
+ ok(count == 2*ARRAY_SIZE(event_list),
"Expected count to be twice event list length, got %u\n", count);
ret = FlushConsoleInputBuffer(input_handle);
@@ -1932,7 +1932,7 @@ static void test_WriteConsoleOutputCharacterA(HANDLE output_handle)
{output_handle, output, 1, {0, 0}, NULL, 0xdeadbeef, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2016,7 +2016,7 @@ static void test_WriteConsoleOutputCharacterW(HANDLE output_handle)
{output_handle, outputW, 1, {0, 0}, NULL, 0xdeadbeef, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2099,7 +2099,7 @@ static void test_WriteConsoleOutputAttribute(HANDLE output_handle)
{output_handle, &attr, 1, {0, 0}, NULL, 0xdeadbeef, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2169,7 +2169,7 @@ static void test_FillConsoleOutputCharacterA(HANDLE output_handle)
{output_handle, 'a', 1, {0, 0}, NULL, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2228,7 +2228,7 @@ static void test_FillConsoleOutputCharacterW(HANDLE output_handle)
{output_handle, 'a', 1, {0, 0}, NULL, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2287,7 +2287,7 @@ static void test_FillConsoleOutputAttribute(HANDLE output_handle)
{output_handle, FOREGROUND_BLUE, 1, {0, 0}, NULL, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2365,7 +2365,7 @@ static void test_ReadConsoleOutputCharacterA(HANDLE output_handle)
{output_handle, &read, 1, {0, 0}, NULL, 0xdeadbeef, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2449,7 +2449,7 @@ static void test_ReadConsoleOutputCharacterW(HANDLE output_handle)
{output_handle, &read, 1, {0, 0}, NULL, 0xdeadbeef, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
@@ -2532,7 +2532,7 @@ static void test_ReadConsoleOutputAttribute(HANDLE output_handle)
{output_handle, &attr, 1, {0, 0}, NULL, 0xdeadbeef, ERROR_INVALID_ACCESS, 1},
};
- for (i = 0; i < sizeof(invalid_table)/sizeof(invalid_table[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_table); i++)
{
if (invalid_table[i].win7_crash)
continue;
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index 410c3f0591..1c4157279b 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -1836,7 +1836,7 @@ static void test_DeleteFileW( void )
/* test DeleteFile on empty directory */
ret = GetTempPathW(MAX_PATH, pathW);
- if (ret + sizeof(dirW)/sizeof(WCHAR)-1 + sizeof(subdirW)/sizeof(WCHAR)-1 >= MAX_PATH)
+ if (ret + ARRAY_SIZE(dirW)-1 + ARRAY_SIZE(subdirW)-1 >= MAX_PATH)
{
ok(0, "MAX_PATH exceeded in constructing paths\n");
return;
@@ -2366,9 +2366,9 @@ static void test_file_sharing(void)
return;
}
- for (a1 = 0; a1 < sizeof(access_modes)/sizeof(access_modes[0]); a1++)
+ for (a1 = 0; a1 < ARRAY_SIZE(access_modes); a1++)
{
- for (s1 = 0; s1 < sizeof(sharing_modes)/sizeof(sharing_modes[0]); s1++)
+ for (s1 = 0; s1 < ARRAY_SIZE(sharing_modes); s1++)
{
SetLastError(0xdeadbeef);
h = CreateFileA( filename, access_modes[a1].dw, sharing_modes[s1].dw,
@@ -2378,9 +2378,9 @@ static void test_file_sharing(void)
ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError());
return;
}
- for (a2 = 0; a2 < sizeof(access_modes)/sizeof(access_modes[0]); a2++)
+ for (a2 = 0; a2 < ARRAY_SIZE(access_modes); a2++)
{
- for (s2 = 0; s2 < sizeof(sharing_modes)/sizeof(sharing_modes[0]); s2++)
+ for (s2 = 0; s2 < ARRAY_SIZE(sharing_modes); s2++)
{
SetLastError(0xdeadbeef);
h2 = CreateFileA( filename, access_modes[a2].dw, sharing_modes[s2].dw,
@@ -2411,7 +2411,7 @@ static void test_file_sharing(void)
}
}
- for (a1 = 0; a1 < sizeof(mapping_modes)/sizeof(mapping_modes[0]); a1++)
+ for (a1 = 0; a1 < ARRAY_SIZE(mapping_modes); a1++)
{
HANDLE m;
@@ -2428,9 +2428,9 @@ static void test_file_sharing(void)
CloseHandle( h );
if (!m) continue;
- for (a2 = 0; a2 < sizeof(access_modes)/sizeof(access_modes[0]); a2++)
+ for (a2 = 0; a2 < ARRAY_SIZE(access_modes); a2++)
{
- for (s2 = 0; s2 < sizeof(sharing_modes)/sizeof(sharing_modes[0]); s2++)
+ for (s2 = 0; s2 < ARRAY_SIZE(sharing_modes); s2++)
{
SetLastError(0xdeadbeef);
h2 = CreateFileA( filename, access_modes[a2].dw, sharing_modes[s2].dw,
@@ -2861,10 +2861,10 @@ static void test_FindFirstFile_wildcards(void)
CreateDirectoryA("test-dir", NULL);
SetCurrentDirectoryA("test-dir");
- for (i = 0; i < sizeof(files) / sizeof(files[0]); ++i)
+ for (i = 0; i < ARRAY_SIZE(files); ++i)
_lclose(_lcreat(files[i], 0));
- for (i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i)
+ for (i = 0; i < ARRAY_SIZE(tests); ++i)
{
char correct[512];
char incorrect[512];
@@ -2901,7 +2901,7 @@ static void test_FindFirstFile_wildcards(void)
missing[0] ? missing+2 : "none");
}
- for (i = 0; i < sizeof(files) / sizeof(files[0]); ++i)
+ for (i = 0; i < ARRAY_SIZE(files); ++i)
DeleteFileA(files[i]);
SetCurrentDirectoryA("..");
RemoveDirectoryA("test-dir");
@@ -3007,7 +3007,7 @@ static void test_async_file_errors(void)
ovl.hEvent = hSem;
completion_count = 0;
szFile[0] = '\0';
- GetWindowsDirectoryA(szFile, sizeof(szFile)/sizeof(szFile[0])-1-strlen("\\win.ini"));
+ GetWindowsDirectoryA(szFile, ARRAY_SIZE(szFile)-1-strlen("\\win.ini"));
strcat(szFile, "\\win.ini");
hFile = CreateFileA(szFile, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, NULL);
@@ -3881,7 +3881,7 @@ todo_wine_if (i == 1)
}
}
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
hfile = CreateFileA(file_name, td[i].access, 0, NULL, td[i].disposition, 0, 0);
@@ -3987,7 +3987,7 @@ static void test_GetFileInformationByHandleEx(void)
ok(directory != INVALID_HANDLE_VALUE, "GetFileInformationByHandleEx: failed to open the temp folder, "
"got error %u.\n", GetLastError());
- for (i = 0; i < sizeof(checks) / sizeof(checks[0]); i += 1)
+ for (i = 0; i < ARRAY_SIZE(checks); i += 1)
{
SetLastError(0xdeadbeef);
ret = pGetFileInformationByHandleEx(directory, checks[i].handleClass, checks[i].ptr, checks[i].size);
@@ -4129,7 +4129,7 @@ static void test_OpenFileById(void)
ok(ret2 != INVALID_FILE_ATTRIBUTES,
"OpenFileById: GetFileAttributesA failed to find the temp file, got error %u\n", GetLastError());
- ret2 = MultiByteToWideChar(CP_ACP, 0, tempFileName + strlen(tempPath), -1, tempFileNameW, sizeof(tempFileNameW)/sizeof(tempFileNameW[0]));
+ ret2 = MultiByteToWideChar(CP_ACP, 0, tempFileName + strlen(tempPath), -1, tempFileNameW, ARRAY_SIZE(tempFileNameW));
ok(ret2, "OpenFileById: MultiByteToWideChar failed to convert tempFileName, got error %u.\n", GetLastError());
tempFileNameLen = ret2 - 1;
@@ -4587,7 +4587,7 @@ static void test_file_access(void)
GetTempPathA(MAX_PATH, path);
GetTempFileNameA(path, "foo", 0, fname);
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
hfile = CreateFileA(fname, td[i].access, 0, NULL, CREATE_ALWAYS,
@@ -4601,7 +4601,7 @@ static void test_file_access(void)
else
ok(hfile != INVALID_HANDLE_VALUE, "%d: CreateFile error %d\n", i, GetLastError());
- for (j = 0; j < sizeof(td)/sizeof(td[0]); j++)
+ for (j = 0; j < ARRAY_SIZE(td); j++)
{
SetLastError(0xdeadbeef);
ret = DuplicateHandle(GetCurrentProcess(), hfile, GetCurrentProcess(), &hdup,
@@ -4843,7 +4843,7 @@ static void test_GetFinalPathNameByHandleW(void)
success = GetVolumePathNameW(long_path, drive_part, MAX_PATH);
ok(success, "GetVolumePathNameW error %u\n", GetLastError());
- success = GetVolumeNameForVolumeMountPointW(drive_part, volume_path, sizeof(volume_path) / sizeof(WCHAR));
+ success = GetVolumeNameForVolumeMountPointW(drive_part, volume_path, ARRAY_SIZE(volume_path));
ok(success, "GetVolumeNameForVolumeMountPointW error %u\n", GetLastError());
/* Test for VOLUME_NAME_GUID */
@@ -4863,7 +4863,7 @@ static void test_GetFinalPathNameByHandleW(void)
wine_dbgstr_w(file_part), wine_dbgstr_w(result_path));
drive_part[lstrlenW(drive_part)-1] = 0;
- success = QueryDosDeviceW(drive_part, nt_path, sizeof(nt_path) / sizeof(WCHAR));
+ success = QueryDosDeviceW(drive_part, nt_path, ARRAY_SIZE(nt_path));
ok(success, "QueryDosDeviceW error %u\n", GetLastError());
/* Test for VOLUME_NAME_NT */
diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c
index fefd3e7956..38fae0eede 100644
--- a/dlls/kernel32/tests/heap.c
+++ b/dlls/kernel32/tests/heap.c
@@ -823,7 +823,7 @@ static void test_obsolete_flags(void)
return;
}
- for (i = 0; i < sizeof(test_global_flags)/sizeof(test_global_flags[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(test_global_flags); i++)
{
gbl = GlobalAlloc(test_global_flags[i].flags, 4);
ok(gbl != NULL, "GlobalAlloc failed\n");
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index c9ca02c28e..38ae3685dc 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -697,7 +697,7 @@ static void test_Loader(void)
/* prevent displaying of the "Unable to load this DLL" message box */
SetErrorMode(SEM_FAILCRITICALERRORS);
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
nt_header = nt_header_template;
nt_header.FileHeader.NumberOfSections = td[i].number_of_sections;
@@ -922,7 +922,7 @@ static void test_Loader(void)
error_match = FALSE;
for (error_index = 0;
- ! error_match && error_index < sizeof(td[i].errors) / sizeof(DWORD);
+ ! error_match && error_index < ARRAY_SIZE(td[i].errors);
error_index++)
{
error_match = td[i].errors[error_index] == GetLastError();
@@ -1581,7 +1581,7 @@ static void test_VirtualProtect(void *base, void *section)
orig_prot = old_prot;
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
ret = VirtualQuery(section, &info, sizeof(info));
@@ -1712,7 +1712,7 @@ static void test_section_access(void)
GetTempPathA(MAX_PATH, temp_path);
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
IMAGE_NT_HEADERS nt_header;
@@ -2028,7 +2028,7 @@ static DWORD WINAPI mutex_thread_proc(void *param)
trace("%04x: mutex_thread_proc: starting\n", GetCurrentThreadId());
while (1)
{
- ret = WaitForMultipleObjects(sizeof(wait_list)/sizeof(wait_list[0]), wait_list, FALSE, 50);
+ ret = WaitForMultipleObjects(ARRAY_SIZE(wait_list), wait_list, FALSE, 50);
if (ret == WAIT_OBJECT_0) break;
else if (ret == WAIT_OBJECT_0 + 1)
{
@@ -3364,7 +3364,7 @@ static void test_ResolveDelayLoadedAPI(void)
section.PointerToRawData = 0x2000;
section.VirtualAddress = 0x2000;
- i = sizeof(td)/sizeof(td[0]);
+ i = ARRAY_SIZE(td);
section.Misc.VirtualSize = sizeof(test_dll) + sizeof(hint) + sizeof(test_func) + sizeof(HMODULE) +
2 * (i + 1) * sizeof(IMAGE_THUNK_DATA);
ok(section.Misc.VirtualSize <= 0x1000, "Too much tests, add a new section!\n");
@@ -3413,7 +3413,7 @@ static void test_ResolveDelayLoadedAPI(void)
SetFilePointer( hfile, idd.ImportAddressTableRVA, NULL, SEEK_SET );
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
/* 0x1a00 is an empty space between delay data and extended delay data, real thunks are not necessary */
itd32.u1.Function = nt_header.OptionalHeader.ImageBase + 0x1a00 + i * 0x20;
@@ -3427,7 +3427,7 @@ static void test_ResolveDelayLoadedAPI(void)
ret = WriteFile(hfile, &itd32, sizeof(itd32), &dummy, NULL);
ok(ret, "WriteFile error %d\n", GetLastError());
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
if (td[i].func)
itd32.u1.AddressOfData = idd.DllNameRVA + sizeof(test_dll);
@@ -3480,7 +3480,7 @@ static void test_ResolveDelayLoadedAPI(void)
itda = RVAToAddr(delaydir->ImportAddressTableRVA, hlib);
htarget = LoadLibraryA(RVAToAddr(delaydir->DllNameRVA, hlib));
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
void *ret, *load;
diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c
index 0b4ce14c46..ba65e0a761 100644
--- a/dlls/kernel32/tests/module.c
+++ b/dlls/kernel32/tests/module.c
@@ -39,7 +39,7 @@ static BOOL cmpStrAW(const char* a, const WCHAR* b, DWORD lenA, DWORD lenB)
WCHAR aw[1024];
DWORD len = MultiByteToWideChar( AreFileApisANSI() ? CP_ACP : CP_OEMCP, 0,
- a, lenA, aw, sizeof(aw) / sizeof(aw[0]) );
+ a, lenA, aw, ARRAY_SIZE(aw));
if (len != lenB) return FALSE;
return memcmp(aw, b, len * sizeof(WCHAR)) == 0;
}
@@ -149,7 +149,7 @@ static void testGetModuleFileName(const char* name)
{
memset(bufW, '-', sizeof(bufW));
SetLastError(0xdeadbeef);
- len1W = GetModuleFileNameW(hMod, bufW, sizeof(bufW) / sizeof(WCHAR));
+ len1W = GetModuleFileNameW(hMod, bufW, ARRAY_SIZE(bufW));
ok(GetLastError() == ERROR_SUCCESS ||
broken(GetLastError() == 0xdeadbeef), /* <= XP SP3 */
"LastError was not reset: %u\n", GetLastError());
@@ -191,7 +191,8 @@ static void testGetModuleFileName_Wrong(void)
if (is_unicode_enabled)
{
bufW[0] = '*';
- ok(GetModuleFileNameW((void*)0xffffffff, bufW, sizeof(bufW) / sizeof(WCHAR)) == 0, "Unexpected success in module handle\n");
+ ok(GetModuleFileNameW((void*)0xffffffff, bufW, ARRAY_SIZE(bufW)) == 0,
+ "Unexpected success in module handle\n");
ok(bufW[0] == '*', "When failing, buffer shouldn't be written to\n");
}
@@ -538,7 +539,7 @@ static void test_LoadLibraryEx_search_flags(void)
ok( !mod, "LoadLibrary succeeded\n" );
ok( GetLastError() == ERROR_MOD_NOT_FOUND, "wrong error %u\n", GetLastError() );
- for (j = 0; j < sizeof(tests) / sizeof(tests[0]); j++)
+ for (j = 0; j < ARRAY_SIZE(tests); j++)
{
for (k = 0; tests[j].add_dirs[k]; k++)
{
@@ -598,7 +599,7 @@ static void testGetDllDirectory(void)
"C:\\Some\\Path\\",
"Q:\\A\\Long\\Path with spaces that\\probably\\doesn't exist!",
};
- const int test_count = sizeof(dll_directories) / sizeof(dll_directories[0]);
+ const int test_count = ARRAY_SIZE(dll_directories);
if (!pGetDllDirectoryA || !pGetDllDirectoryW)
{
@@ -917,7 +918,7 @@ static void test_AddDllDirectory(void)
}
buf[0] = '\0';
- GetTempPathW( sizeof(path)/sizeof(path[0]), path );
+ GetTempPathW(ARRAY_SIZE(path), path );
ret = GetTempFileNameW( path, tmpW, 0, buf );
ok( ret, "GetTempFileName failed err %u\n", GetLastError() );
SetLastError( 0xdeadbeef );
diff --git a/dlls/kernel32/tests/path.c b/dlls/kernel32/tests/path.c
index 632aefc34e..ca1cbf30ec 100644
--- a/dlls/kernel32/tests/path.c
+++ b/dlls/kernel32/tests/path.c
@@ -1018,7 +1018,7 @@ static void test_GetTempPathA(char* tmp_dir)
len = GetTempPathA(slen / 2, buf);
ok(len == slen || broken(len == slen + 1) /* read the big comment above */ ,
"expected %d, got %d\n", slen, len);
- for(len = 0; len < sizeof(buf) / sizeof(buf[0]); len++)
+ for(len = 0; len < ARRAY_SIZE(buf); len++)
ok(buf[len] == 'a', "expected 'a' at [%d], got 0x%x\n", len, buf[len]);
}
@@ -1029,7 +1029,7 @@ static void test_GetTempPathW(char* tmp_dir)
WCHAR tmp_dirW[MAX_PATH];
static const WCHAR fooW[] = {'f','o','o',0};
- MultiByteToWideChar(CP_ACP,0,tmp_dir,-1,tmp_dirW,sizeof(tmp_dirW)/sizeof(*tmp_dirW));
+ MultiByteToWideChar(CP_ACP, 0, tmp_dir, -1, tmp_dirW, ARRAY_SIZE(tmp_dirW));
len_with_null = lstrlenW(tmp_dirW) + 1;
/* This one is different from ANSI version: ANSI version doesn't
@@ -1064,18 +1064,18 @@ static void test_GetTempPathW(char* tmp_dir)
ok(lstrcmpiW(buf, tmp_dirW) == 0, "GetTempPathW returned an incorrect temporary path\n");
ok(len == lstrlenW(buf), "returned length should be equal to the length of string\n");
- for(len = 0; len < sizeof(buf) / sizeof(buf[0]); len++)
+ for(len = 0; len < ARRAY_SIZE(buf); len++)
buf[len] = 'a';
len = GetTempPathW(len, buf);
ok(lstrcmpiW(buf, tmp_dirW) == 0, "GetTempPathW returned an incorrect temporary path\n");
ok(len == lstrlenW(buf), "returned length should be equal to the length of string\n");
/* The rest of the buffer must be zeroed */
slen = len + 1;
- for(len++; len < sizeof(buf) / sizeof(buf[0]); len++)
+ for(len++; len < ARRAY_SIZE(buf); len++)
ok(buf[len] == '\0', "expected NULL at [%d], got 0x%x\n", len, buf[len]);
/* When the buffer is not long enough the length passed is zeroed */
- for(len = 0; len < sizeof(buf) / sizeof(buf[0]); len++)
+ for(len = 0; len < ARRAY_SIZE(buf); len++)
buf[len] = 'a';
len = GetTempPathW(slen / 2, buf);
ok(len == slen || broken(len == slen + 1) /* read the big comment above */ ,
@@ -1096,7 +1096,7 @@ static void test_GetTempPathW(char* tmp_dir)
for(len = 0; len < slen / 2; len++)
ok(buf[len] == '\0', "expected NULL at [%d], got 0x%x\n", len, buf[len]);
- for(; len < sizeof(buf) / sizeof(buf[0]); len++)
+ for(; len < ARRAY_SIZE(buf); len++)
ok(buf[len] == 'a', "expected 'a' at [%d], got 0x%x\n", len, buf[len]);
/* bogus application from bug 38220 passes the count value in sizeof(buffer)
@@ -1331,7 +1331,7 @@ static void test_GetLongPathNameW(void)
* files.
*/
name[0] = 0;
- while (lstrlenW(name) < (sizeof(name)/sizeof(WCHAR) - 1))
+ while (lstrlenW(name) < (ARRAY_SIZE(name) - 1))
lstrcatW(name, letterX);
GetTempPathW(MAX_PATH, tempdir);
@@ -1429,7 +1429,7 @@ static void test_GetShortPathNameW(void)
lstrcatW( path, test_path );
lstrcatW( path, backSlash );
short_path[0] = 0;
- length = GetShortPathNameW( path, short_path, sizeof(short_path) / sizeof(*short_path) );
+ length = GetShortPathNameW( path, short_path, ARRAY_SIZE( short_path ));
ok( length, "GetShortPathNameW returned 0.\n" );
lstrcpyW( path, tmppath );
@@ -1460,7 +1460,7 @@ static void test_GetShortPathNameW(void)
ok( file != INVALID_HANDLE_VALUE, "File was not created.\n" );
CloseHandle( file );
- length = GetShortPathNameW( path, short_path, sizeof(short_path)/sizeof(*short_path) );
+ length = GetShortPathNameW( path, short_path, ARRAY_SIZE( short_path ));
ok( length, "GetShortPathNameW failed: %u.\n", GetLastError() );
ret = DeleteFileW( path );
@@ -1752,7 +1752,7 @@ static void create_manifest_file(const char *filename, const char *manifest)
MultiByteToWideChar( CP_ACP, 0, filename, -1, path, MAX_PATH );
- GetTempPathW(sizeof(manifest_path)/sizeof(WCHAR), manifest_path);
+ GetTempPathW(ARRAY_SIZE(manifest_path), manifest_path);
lstrcatW(manifest_path, path);
file = CreateFileW(manifest_path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
@@ -1777,7 +1777,7 @@ static HANDLE test_create(const char *file)
HANDLE handle;
MultiByteToWideChar(CP_ACP, 0, file, -1, path, MAX_PATH);
- GetTempPathW(sizeof(manifest_path)/sizeof(WCHAR), manifest_path);
+ GetTempPathW(ARRAY_SIZE(manifest_path), manifest_path);
lstrcatW(manifest_path, path);
memset(&actctx, 0, sizeof(ACTCTXW));
@@ -1818,18 +1818,18 @@ static void test_SearchPathA(void)
return;
}
- GetWindowsDirectoryA(pathA, sizeof(pathA)/sizeof(CHAR));
+ GetWindowsDirectoryA(pathA, ARRAY_SIZE(pathA));
/* NULL filename */
SetLastError(0xdeadbeef);
- ret = pSearchPathA(pathA, NULL, NULL, sizeof(buffA)/sizeof(CHAR), buffA, &ptrA);
+ ret = pSearchPathA(pathA, NULL, NULL, ARRAY_SIZE(buffA), buffA, &ptrA);
ok(ret == 0, "Expected failure, got %d\n", ret);
ok(GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* empty filename */
SetLastError(0xdeadbeef);
- ret = pSearchPathA(pathA, fileA, NULL, sizeof(buffA)/sizeof(CHAR), buffA, &ptrA);
+ ret = pSearchPathA(pathA, fileA, NULL, ARRAY_SIZE(buffA), buffA, &ptrA);
ok(ret == 0, "Expected failure, got %d\n", ret);
ok(GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
@@ -1845,38 +1845,38 @@ static void test_SearchPathA(void)
delete_manifest_file("main.manifest");
/* search fails without active context */
- ret = pSearchPathA(NULL, testdepA, NULL, sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, testdepA, NULL, ARRAY_SIZE(buffA), buffA, NULL);
ok(ret == 0, "got %d\n", ret);
- ret = pSearchPathA(NULL, kernel32A, NULL, sizeof(path2A)/sizeof(CHAR), path2A, NULL);
+ ret = pSearchPathA(NULL, kernel32A, NULL, ARRAY_SIZE(path2A), path2A, NULL);
ok(ret && ret == strlen(path2A), "got %d\n", ret);
ret = pActivateActCtx(handle, &cookie);
ok(ret, "failed to activate context, %u\n", GetLastError());
/* works when activated */
- ret = pSearchPathA(NULL, testdepA, NULL, sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, testdepA, NULL, ARRAY_SIZE(buffA), buffA, NULL);
ok(ret && ret == strlen(buffA), "got %d\n", ret);
- ret = pSearchPathA(NULL, "testdep.dll", ".ext", sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, "testdep.dll", ".ext", ARRAY_SIZE(buffA), buffA, NULL);
ok(ret && ret == strlen(buffA), "got %d\n", ret);
- ret = pSearchPathA(NULL, "testdep", ".dll", sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, "testdep", ".dll", ARRAY_SIZE(buffA), buffA, NULL);
ok(ret && ret == strlen(buffA), "got %d\n", ret);
- ret = pSearchPathA(NULL, "testdep", ".ext", sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, "testdep", ".ext", ARRAY_SIZE(buffA), buffA, NULL);
ok(!ret, "got %d\n", ret);
/* name contains path */
- ret = pSearchPathA(NULL, testdeprelA, NULL, sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, testdeprelA, NULL, ARRAY_SIZE(buffA), buffA, NULL);
ok(!ret, "got %d\n", ret);
/* fails with specified path that doesn't contain this file */
- ret = pSearchPathA(pathA, testdepA, NULL, sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(pathA, testdepA, NULL, ARRAY_SIZE(buffA), buffA, NULL);
ok(!ret, "got %d\n", ret);
/* path is redirected for wellknown names too */
- ret = pSearchPathA(NULL, kernel32A, NULL, sizeof(buffA)/sizeof(CHAR), buffA, NULL);
+ ret = pSearchPathA(NULL, kernel32A, NULL, ARRAY_SIZE(buffA), buffA, NULL);
ok(ret && ret == strlen(buffA), "got %d\n", ret);
ok(strcmp(buffA, path2A), "got wrong path %s, %s\n", buffA, path2A);
@@ -1911,14 +1911,14 @@ static void test_SearchPathW(void)
if (0)
{
/* NULL filename, crashes on nt4 */
- pSearchPathW(pathW, NULL, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, &ptrW);
+ pSearchPathW(pathW, NULL, NULL, ARRAY_SIZE(buffW), buffW, &ptrW);
}
- GetWindowsDirectoryW(pathW, sizeof(pathW)/sizeof(WCHAR));
+ GetWindowsDirectoryW(pathW, ARRAY_SIZE(pathW));
/* empty filename */
SetLastError(0xdeadbeef);
- ret = pSearchPathW(pathW, fileW, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, &ptrW);
+ ret = pSearchPathW(pathW, fileW, NULL, ARRAY_SIZE(buffW), buffW, &ptrW);
ok(ret == 0, "Expected failure, got %d\n", ret);
ok(GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
@@ -1934,50 +1934,50 @@ if (0)
delete_manifest_file("main.manifest");
/* search fails without active context */
- ret = pSearchPathW(NULL, testdepW, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, testdepW, NULL, ARRAY_SIZE(buffW), buffW, NULL);
ok(ret == 0, "got %d\n", ret);
- ret = pSearchPathW(NULL, kernel32dllW, NULL, sizeof(path2W)/sizeof(WCHAR), path2W, NULL);
+ ret = pSearchPathW(NULL, kernel32dllW, NULL, ARRAY_SIZE(path2W), path2W, NULL);
ok(ret && ret == lstrlenW(path2W), "got %d\n", ret);
/* full path, name without 'dll' extension */
- GetSystemDirectoryW(pathW, sizeof(pathW)/sizeof(WCHAR));
- ret = pSearchPathW(pathW, kernel32W, NULL, sizeof(path2W)/sizeof(WCHAR), path2W, NULL);
+ GetSystemDirectoryW(pathW, ARRAY_SIZE(pathW));
+ ret = pSearchPathW(pathW, kernel32W, NULL, ARRAY_SIZE(path2W), path2W, NULL);
ok(ret == 0, "got %d\n", ret);
- GetWindowsDirectoryW(pathW, sizeof(pathW)/sizeof(WCHAR));
+ GetWindowsDirectoryW(pathW, ARRAY_SIZE(pathW));
ret = pActivateActCtx(handle, &cookie);
ok(ret, "failed to activate context, %u\n", GetLastError());
/* works when activated */
- ret = pSearchPathW(NULL, testdepW, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, testdepW, NULL, ARRAY_SIZE(buffW), buffW, NULL);
ok(ret && ret == lstrlenW(buffW), "got %d\n", ret);
- ret = pSearchPathW(NULL, testdepW, extW, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, testdepW, extW, ARRAY_SIZE(buffW), buffW, NULL);
ok(ret && ret == lstrlenW(buffW), "got %d\n", ret);
- ret = pSearchPathW(NULL, testdep1W, dllW, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, testdep1W, dllW, ARRAY_SIZE(buffW), buffW, NULL);
ok(ret && ret == lstrlenW(buffW), "got %d\n", ret);
- ret = pSearchPathW(NULL, testdep1W, extW, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, testdep1W, extW, ARRAY_SIZE(buffW), buffW, NULL);
ok(!ret, "got %d\n", ret);
/* name contains path */
- ret = pSearchPathW(NULL, testdeprelW, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, testdeprelW, NULL, ARRAY_SIZE(buffW), buffW, NULL);
ok(!ret, "got %d\n", ret);
/* fails with specified path that doesn't contain this file */
- ret = pSearchPathW(pathW, testdepW, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(pathW, testdepW, NULL, ARRAY_SIZE(buffW), buffW, NULL);
ok(!ret, "got %d\n", ret);
/* path is redirected for wellknown names too, meaning it takes precedence over normal search order */
- ret = pSearchPathW(NULL, kernel32dllW, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, kernel32dllW, NULL, ARRAY_SIZE(buffW), buffW, NULL);
ok(ret && ret == lstrlenW(buffW), "got %d\n", ret);
ok(lstrcmpW(buffW, path2W), "got wrong path %s, %s\n", wine_dbgstr_w(buffW), wine_dbgstr_w(path2W));
/* path is built using on manifest file name */
- ret = pSearchPathW(NULL, ole32W, NULL, sizeof(buffW)/sizeof(WCHAR), buffW, NULL);
+ ret = pSearchPathW(NULL, ole32W, NULL, ARRAY_SIZE(buffW), buffW, NULL);
ok(ret && ret == lstrlenW(buffW), "got %d\n", ret);
ret = pDeactivateActCtx(0, cookie);
@@ -2010,7 +2010,7 @@ static void test_GetFullPathNameA(void)
{"", MAX_PATH, output, &filepart},
};
- for (i = 0; i < sizeof(invalid_parameters)/sizeof(invalid_parameters[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_parameters); i++)
{
SetLastError(0xdeadbeef);
strcpy(output, "deadbeef");
@@ -2040,7 +2040,7 @@ static void test_GetFullPathNameA(void)
{ "c:\\\x83\x8f\x83\x43\x83\x93\\wine.c", "wine.c" },
{ "c:\\demo\\\x97\xa0\x95\x5c", "\x97\xa0\x95\x5c" }
};
- for (i = 0; i < sizeof(testset)/sizeof(testset[0]); i++) {
+ for (i = 0; i < ARRAY_SIZE(testset); i++) {
ret = GetFullPathNameA(testset[i].input, sizeof(output),
output, &filepart);
ok(ret, "[%d] GetFullPathName error %u\n", i, GetLastError());
@@ -2088,7 +2088,7 @@ static void test_GetFullPathNameW(void)
return;
}
- for (i = 0; i < sizeof(invalid_parameters)/sizeof(invalid_parameters[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(invalid_parameters); i++)
{
SetLastError(0xdeadbeef);
lstrcpyW(output, deadbeefW);
@@ -2261,7 +2261,7 @@ static void test_CheckNameLegalDOS8Dot3(void)
br = pCheckNameLegalDOS8Dot3A("testtest.txt", NULL, 0, NULL, NULL);
ok(br == FALSE, "CheckNameLegalDOS8Dot3A should have failed\n");
- for(i = 0; i < sizeof(cases)/sizeof(*cases); ++i){
+ for(i = 0; i < ARRAY_SIZE(cases); ++i){
br = pCheckNameLegalDOS8Dot3W(cases[i].name, NULL, 0, &has_space, &is_legal);
ok(br == TRUE, "CheckNameLegalDOS8Dot3W failed for %s\n", wine_dbgstr_w(cases[i].name));
ok(is_legal == cases[i].should_be_legal, "Got wrong legality for %s\n", wine_dbgstr_w(cases[i].name));
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index 13570b032c..0e6c7a3ae8 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -2381,9 +2381,8 @@ static void test_NamedPipeHandleState(void)
* on a local pipe.
*/
SetLastError(0xdeadbeef);
- ret = GetNamedPipeHandleStateA(server, &state, &instances,
- &maxCollectionCount, &collectDataTimeout, userName,
- sizeof(userName) / sizeof(userName[0]));
+ ret = GetNamedPipeHandleStateA(server, &state, &instances, &maxCollectionCount,
+ &collectDataTimeout, userName, ARRAY_SIZE(userName));
todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index b1a453998c..0eb113b635 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -423,7 +423,7 @@ static void doChild(const char* file, const char* option)
childPrintf(hFile, "[Misc]\n");
if (GetCurrentDirectoryA(sizeof(bufA), bufA))
childPrintf(hFile, "CurrDirA=%s\n", encodeA(bufA));
- if (GetCurrentDirectoryW(sizeof(bufW) / sizeof(bufW[0]), bufW))
+ if (GetCurrentDirectoryW(ARRAY_SIZE(bufW), bufW))
childPrintf(hFile, "CurrDirW=%s\n", encodeW(bufW));
childPrintf(hFile, "\n");
@@ -1987,14 +1987,14 @@ static void test_QueryFullProcessImageNameW(void)
ok(GetModuleFileNameW(NULL, module_name, 1024), "GetModuleFileNameW(NULL, ...) failed\n");
/* GetCurrentProcess pseudo-handle */
- size = sizeof(buf) / sizeof(buf[0]);
+ size = ARRAY_SIZE(buf);
expect_eq_d(TRUE, pQueryFullProcessImageNameW(GetCurrentProcess(), 0, buf, &size));
expect_eq_d(lstrlenW(buf), size);
expect_eq_ws_i(buf, module_name);
hSelf = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, GetCurrentProcessId());
/* Real handle */
- size = sizeof(buf) / sizeof(buf[0]);
+ size = ARRAY_SIZE(buf);
expect_eq_d(TRUE, pQueryFullProcessImageNameW(hSelf, 0, buf, &size));
expect_eq_d(lstrlenW(buf), size);
expect_eq_ws_i(buf, module_name);
@@ -2032,7 +2032,7 @@ static void test_QueryFullProcessImageNameW(void)
/* native path */
- size = sizeof(buf) / sizeof(buf[0]);
+ size = ARRAY_SIZE(buf);
expect_eq_d(TRUE, pQueryFullProcessImageNameW(hSelf, PROCESS_NAME_NATIVE, buf, &size));
expect_eq_d(lstrlenW(buf), size);
ok(buf[0] == '\\', "NT path should begin with '\\'\n");
@@ -2040,7 +2040,7 @@ static void test_QueryFullProcessImageNameW(void)
module_name[2] = '\0';
*device = '\0';
- size = QueryDosDeviceW(module_name, device, sizeof(device)/sizeof(device[0]));
+ size = QueryDosDeviceW(module_name, device, ARRAY_SIZE(device));
ok(size, "QueryDosDeviceW failed: le=%u\n", GetLastError());
len = lstrlenW(device);
ok(size >= len+2, "expected %d to be greater than %d+2 = strlen(%s)\n", size, len, wine_dbgstr_w(device));
diff --git a/dlls/kernel32/tests/profile.c b/dlls/kernel32/tests/profile.c
index c5c77025b2..4dbe129b76 100644
--- a/dlls/kernel32/tests/profile.c
+++ b/dlls/kernel32/tests/profile.c
@@ -71,7 +71,7 @@ static void test_profile_int(void)
{ SECTION, KEY, "B4294967297", TESTFILE, -1, 0 , 0},
{ SECTION, KEY, "B4294967297", TESTFILE, 1, 0 , 0},
};
- int i, num_test = (sizeof(profileInt)/sizeof(struct _profileInt));
+ int i, num_test = ARRAY_SIZE(profileInt);
UINT res;
DeleteFileA( TESTFILE);
@@ -144,8 +144,7 @@ static void test_profile_string(void)
CloseHandle( h);
/* works only in unicode, ascii crashes */
- ret=GetPrivateProfileStringW(emptyW, keyW, emptyW, bufW,
- sizeof(bufW)/sizeof(bufW[0]), TESTFILE2W);
+ ret=GetPrivateProfileStringW(emptyW, keyW, emptyW, bufW, ARRAY_SIZE(bufW), TESTFILE2W);
todo_wine
ok(ret == 13, "expected 13, got %u\n", ret);
todo_wine
@@ -153,8 +152,7 @@ static void test_profile_string(void)
wine_dbgstr_w(valsectionW), wine_dbgstr_w(bufW) );
/* works only in unicode, ascii crashes */
- ret=GetPrivateProfileStringW(sW, emptyW, emptyW, bufW,
- sizeof(bufW)/sizeof(bufW[0]), TESTFILE2W);
+ ret=GetPrivateProfileStringW(sW, emptyW, emptyW, bufW, ARRAY_SIZE(bufW), TESTFILE2W);
todo_wine
ok(ret == 10, "expected 10, got %u\n", ret);
todo_wine
@@ -394,7 +392,7 @@ static void test_profile_existing(void)
HANDLE h = 0;
char buffer[MAX_PATH];
- for (i=0; i < sizeof(pe)/sizeof(pe[0]); i++)
+ for (i=0; i < ARRAY_SIZE(pe); i++)
{
h = CreateFileA(testfile1, pe[i].dwDesiredAccess, pe[i].dwShareMode, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
@@ -434,7 +432,7 @@ static void test_profile_existing(void)
ok( WriteFile( h, buffer, strlen(buffer), &size, NULL ), "failed to write\n" );
CloseHandle( h );
- for (i=0; i < sizeof(pe)/sizeof(pe[0]); i++)
+ for (i=0; i < ARRAY_SIZE(pe); i++)
{
h = CreateFileA(testfile2, pe[i].dwDesiredAccess, pe[i].dwShareMode, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
diff --git a/dlls/kernel32/tests/resource.c b/dlls/kernel32/tests/resource.c
index 74066cfba3..b3aaed6840 100644
--- a/dlls/kernel32/tests/resource.c
+++ b/dlls/kernel32/tests/resource.c
@@ -478,7 +478,7 @@ START_TEST(resource)
update_empty_exe();
- for(i=0; i < sizeof( sec_variants ) / sizeof( sec_variants[0] ); i++)
+ for(i=0; i < ARRAY_SIZE(sec_variants); i++)
{
const struct _sec_variants *sec = &sec_variants[i];
build_exe( &sec->build );
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 5fb19f0992..b69d2eb371 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -1933,7 +1933,7 @@ static void test_thread_info(void)
return;
}
- for (i = 0; i < sizeof(info_size)/sizeof(info_size[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(info_size); i++)
{
memset(buf, 0, sizeof(buf));
diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
index eb78a383d2..ebda2db1f1 100644
--- a/dlls/kernel32/tests/version.c
+++ b/dlls/kernel32/tests/version.c
@@ -606,7 +606,7 @@ static void test_VerifyVersionInfo(void)
}
}
- for (i = 0; i < sizeof(verify_version_tests)/sizeof(verify_version_tests[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(verify_version_tests); i++)
{
struct verify_version_test *test = &verify_version_tests[i];
DWORD srcinfo = test->srcinfo;
diff --git a/dlls/kernel32/tests/virtual.c b/dlls/kernel32/tests/virtual.c
index 4a449fd82b..a343fa435c 100644
--- a/dlls/kernel32/tests/virtual.c
+++ b/dlls/kernel32/tests/virtual.c
@@ -1716,7 +1716,7 @@ static void test_CreateFileMapping(void)
file[2] = CreateFileA( path, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 );
ok( file[2] != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() );
- for (i = 0; i < sizeof(sec_flag_tests) / sizeof(sec_flag_tests[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(sec_flag_tests); i++)
{
DWORD flags = sec_flag_tests[i].flags;
DWORD perm = sec_flag_tests[i].file == 2 ? PAGE_READONLY : PAGE_READWRITE;
@@ -3333,7 +3333,7 @@ static void test_VirtualProtect(void)
ok(status == STATUS_SUCCESS, "NtProtectVirtualMemory should succeed, got %08x\n", status);
ok(old_prot == PAGE_NOACCESS, "got %#x != expected PAGE_NOACCESS\n", old_prot);
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
ret = VirtualQuery(base, &info, sizeof(info));
@@ -3499,7 +3499,7 @@ static void test_VirtualAlloc_protection(void)
DWORD ret, i;
MEMORY_BASIC_INFORMATION info;
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
base = VirtualAlloc(0, si.dwPageSize, MEM_COMMIT, td[i].prot);
@@ -3602,7 +3602,7 @@ static void test_CreateFileMapping_protection(void)
SetFilePointer(hfile, si.dwPageSize, NULL, FILE_BEGIN);
SetEndOfFile(hfile);
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
hmap = CreateFileMappingW(hfile, NULL, td[i].prot | SEC_COMMIT, 0, si.dwPageSize, NULL);
@@ -3674,7 +3674,7 @@ static void test_CreateFileMapping_protection(void)
hmap = CreateFileMappingW(hfile, NULL, alloc_prot, 0, si.dwPageSize, NULL);
ok(hmap != 0, "%d: CreateFileMapping error %d\n", i, GetLastError());
- for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(td); i++)
{
SetLastError(0xdeadbeef);
base = MapViewOfFile(hmap, FILE_MAP_READ | FILE_MAP_WRITE | (page_exec_supported ? FILE_MAP_EXECUTE : 0), 0, 0, 0);
@@ -3941,7 +3941,7 @@ static void test_mapping( HANDLE hfile, DWORD sec_flags )
BOOL anon_mapping = (hfile == INVALID_HANDLE_VALUE);
trace( "testing %s mapping flags %08x\n", anon_mapping ? "anonymous" : "file", sec_flags );
- for (i = 0; i < sizeof(page_prot)/sizeof(page_prot[0]); i++)
+ for (i = 0; i < ARRAY_SIZE(page_prot); i++)
{
SetLastError(0xdeadbeef);
hmap = CreateFileMappingW(hfile, NULL, page_prot[i] | sec_flags, 0, si.dwPageSize, NULL);
@@ -3998,7 +3998,7 @@ static void test_mapping( HANDLE hfile, DWORD sec_flags )
ok(hmap != 0, "%d: CreateFileMapping(%04x) error %d\n", i, page_prot[i], GetLastError());
- for (j = 0; j < sizeof(view)/sizeof(view[0]); j++)
+ for (j = 0; j < ARRAY_SIZE(view); j++)
{
nt_base = map_view_of_file(hmap, view[j].access);
if (nt_base)
@@ -4085,7 +4085,7 @@ static void test_mapping( HANDLE hfile, DWORD sec_flags )
prev_prot = info.Protect;
alloc_prot = info.AllocationProtect;
- for (k = 0; k < sizeof(page_prot)/sizeof(page_prot[0]); k++)
+ for (k = 0; k < ARRAY_SIZE(page_prot); k++)
{
/*trace("map %#x, view %#x, requested prot %#x\n", page_prot[i], view[j].prot, page_prot[k]);*/
DWORD actual_prot = (sec_flags & SEC_IMAGE) ? map_prot_no_write(page_prot[k]) : page_prot[k];
@@ -4118,7 +4118,7 @@ static void test_mapping( HANDLE hfile, DWORD sec_flags )
}
}
- for (k = 0; k < sizeof(page_prot)/sizeof(page_prot[0]); k++)
+ for (k = 0; k < ARRAY_SIZE(page_prot); k++)
{
/*trace("map %#x, view %#x, requested prot %#x\n", page_prot[i], view[j].prot, page_prot[k]);*/
SetLastError(0xdeadbeef);
@@ -4172,7 +4172,7 @@ static void test_mapping( HANDLE hfile, DWORD sec_flags )
prev_prot = info.Protect;
alloc_prot = info.AllocationProtect;
- for (k = 0; k < sizeof(page_prot)/sizeof(page_prot[0]); k++)
+ for (k = 0; k < ARRAY_SIZE(page_prot); k++)
{
DWORD actual_prot = (sec_flags & SEC_IMAGE) ? map_prot_no_write(page_prot[k]) : page_prot[k];
SetLastError(0xdeadbeef);
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index f673fd2917..2de66cdfd0 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -251,7 +251,7 @@ static void test_GetVolumeNameForVolumeMountPointW(void)
{
BOOL ret;
WCHAR volume[MAX_PATH], path[] = {'c',':','\\',0};
- DWORD len = sizeof(volume) / sizeof(WCHAR);
+ DWORD len = ARRAY_SIZE(volume);
/* not present before w2k */
if (!pGetVolumeNameForVolumeMountPointW) {
@@ -795,7 +795,7 @@ static void test_GetVolumePathNameA(void)
ret = SetEnvironmentVariableA( "CurrentDrive", cwd );
ok( ret, "Failed to set an environment variable for the current working drive.\n" );
- for (i=0; i<sizeof(test_paths)/sizeof(test_paths[0]); i++)
+ for (i=0; i<ARRAY_SIZE(test_paths); i++)
{
BOOL broken_ret = test_paths[i].broken_error == NO_ERROR;
char *output = (test_paths[i].path_name != NULL ? volume_path : NULL);
--
2.14.4
2
2
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
Makefile.am | 11 ++++++++++-
libs/.gitignore | 1 +
libs/vkd3d/device.c | 2 ++
libs/vkd3d/vkd3d_private.h | 2 ++
4 files changed, 15 insertions(+), 1 deletion(-)
create mode 100644 libs/.gitignore
diff --git a/Makefile.am b/Makefile.am
index faefc679258e..14f2d5168134 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -94,7 +94,8 @@ libvkd3d_la_SOURCES = \
libs/vkd3d/vkd3d.map \
libs/vkd3d/vkd3d_main.c \
libs/vkd3d/vkd3d_private.h \
- libs/vkd3d/vulkan_procs.h
+ libs/vkd3d/vulkan_procs.h \
+ libs/vkd3d_version.c
libvkd3d_la_LDFLAGS = -version-info 1:0:0
libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @DL_LIBS@ @PTHREAD_LIBS@
if HAVE_LD_VERSION_SCRIPT
@@ -173,6 +174,14 @@ libvkd3d.pc: $(srcdir)/libs/vkd3d/libvkd3d.pc.in
-e 's![@]PACKAGE_VERSION[@]!$(PACKAGE_VERSION)!g' \
$< > $@
+libs/vkd3d_version.c: dummy-vkd3d-version
+ version=`(GIT_DIR=$(top_srcdir)/.git git describe HEAD 2>/dev/null || echo "vkd3d-$(PACKAGE_VERSION)") | sed -n -e '$$s/\(.*\)/const char vkd3d_build[] = "\1";/p'` && (echo $$version | cmp -s - $@) || echo $$version >$@ || ($(RM) $@ && exit 1)
+.SILENT: libs/vkd3d_version.c
+CLEANFILES += libs/vkd3d_version.c
+
+.PHONY: dummy-vkd3d-version
+dummy-vkd3d-version:
+
## Cross-compile tests
cross_implibs = crosslibs/d3d12
CROSS_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/include/private -I$(builddir)/include
diff --git a/libs/.gitignore b/libs/.gitignore
new file mode 100644
index 000000000000..b4fc05a293e0
--- /dev/null
+++ b/libs/.gitignore
@@ -0,0 +1 @@
+vkd3d_version.c
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index e4c4d5211d61..fb57d76b5666 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -284,6 +284,8 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance,
VkResult vr;
HRESULT hr;
+ TRACE("Build: %s.\n", vkd3d_build);
+
if (!create_info->pfn_signal_event)
{
ERR("Invalid signal event function pointer.\n");
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index 29611b8ccdc5..685825955a7f 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -794,4 +794,6 @@ HRESULT vkd3d_load_vk_instance_procs(struct vkd3d_vk_instance_procs *procs,
HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
const struct vkd3d_vk_instance_procs *parent_procs, VkDevice device) DECLSPEC_HIDDEN;
+extern const char vkd3d_build[];
+
#endif /* __VKD3D_PRIVATE_H */
--
2.16.4
3
2
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 305 +++++++++++++++++++++++++++++++++++++++++++++++
tests/vkd3d_d3d12_test.h | 15 +--
2 files changed, 313 insertions(+), 7 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index c6220aa0113d..217b4368a6b2 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -909,6 +909,7 @@ static ID3D12RootSignature *create_texture_root_signature_(unsigned int line,
sampler_desc.AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
sampler_desc.AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
sampler_desc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
+ sampler_desc.MaxLOD = D3D12_FLOAT32_MAX;
sampler_desc.ShaderRegister = 0;
sampler_desc.RegisterSpace = 0;
sampler_desc.ShaderVisibility = shader_visibility;
@@ -8973,6 +8974,309 @@ static void test_gather(void)
destroy_test_context(&context);
}
+static void test_cube_maps(void)
+{
+ unsigned int i, j, sub_resource_idx, sub_resource_count;
+ D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc;
+ D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc;
+ ID3D12GraphicsCommandList *command_list;
+ D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
+ D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle;
+ D3D12_SUBRESOURCE_DATA *texture_data;
+ const D3D12_SHADER_BYTECODE *ps;
+ struct test_context_desc desc;
+ struct test_context context;
+ ID3D12DescriptorHeap *heap;
+ ID3D12CommandQueue *queue;
+ ID3D12PipelineState *pso;
+ ID3D12Resource *texture;
+ float *data;
+ HRESULT hr;
+
+ struct
+ {
+ unsigned int face;
+ unsigned int level;
+ unsigned int cube;
+ } constants;
+
+ const unsigned int texture_size = 64;
+ static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
+ static const DWORD ps_cube_code[] =
+ {
+#if 0
+ TextureCube t;
+ SamplerState s;
+
+ uint face;
+ uint level;
+
+ float4 main(float4 position : SV_POSITION) : SV_Target
+ {
+ float2 p;
+ p.x = position.x / 640.0f;
+ p.y = position.y / 480.0f;
+
+ float3 coord;
+ switch (face)
+ {
+ case 0:
+ coord = float3(1.0f, p.x, p.y);
+ break;
+ case 1:
+ coord = float3(-1.0f, p.x, p.y);
+ break;
+ case 2:
+ coord = float3(p.x, 1.0f, p.y);
+ break;
+ case 3:
+ coord = float3(p.x, -1.0f, p.y);
+ break;
+ case 4:
+ coord = float3(p.x, p.y, 1.0f);
+ break;
+ case 5:
+ default:
+ coord = float3(p.x, p.y, -1.0f);
+ break;
+ }
+ return t.SampleLevel(s, coord, level);
+ }
+#endif
+ 0x43425844, 0x039aee18, 0xfd630453, 0xb884cf0f, 0x10100744, 0x00000001, 0x00000310, 0x00000003,
+ 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
+ 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000030f, 0x505f5653, 0x5449534f, 0x004e4f49,
+ 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
+ 0x00000000, 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00000274, 0x00000040,
+ 0x0000009d, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000, 0x00000000,
+ 0x04003058, 0x00107000, 0x00000000, 0x00005555, 0x04002064, 0x00101032, 0x00000000, 0x00000001,
+ 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x0400004c, 0x0020800a, 0x00000000,
+ 0x00000000, 0x03000006, 0x00004001, 0x00000000, 0x05000036, 0x00100012, 0x00000000, 0x00004001,
+ 0x3f800000, 0x0a000038, 0x00100062, 0x00000000, 0x00101106, 0x00000000, 0x00004002, 0x00000000,
+ 0x3acccccd, 0x3b088889, 0x00000000, 0x01000002, 0x03000006, 0x00004001, 0x00000001, 0x05000036,
+ 0x00100012, 0x00000000, 0x00004001, 0xbf800000, 0x0a000038, 0x00100062, 0x00000000, 0x00101106,
+ 0x00000000, 0x00004002, 0x00000000, 0x3acccccd, 0x3b088889, 0x00000000, 0x01000002, 0x03000006,
+ 0x00004001, 0x00000002, 0x0a000038, 0x00100052, 0x00000000, 0x00101106, 0x00000000, 0x00004002,
+ 0x3acccccd, 0x00000000, 0x3b088889, 0x00000000, 0x05000036, 0x00100022, 0x00000000, 0x00004001,
+ 0x3f800000, 0x01000002, 0x03000006, 0x00004001, 0x00000003, 0x0a000038, 0x00100052, 0x00000000,
+ 0x00101106, 0x00000000, 0x00004002, 0x3acccccd, 0x00000000, 0x3b088889, 0x00000000, 0x05000036,
+ 0x00100022, 0x00000000, 0x00004001, 0xbf800000, 0x01000002, 0x03000006, 0x00004001, 0x00000004,
+ 0x0a000038, 0x00100032, 0x00000000, 0x00101046, 0x00000000, 0x00004002, 0x3acccccd, 0x3b088889,
+ 0x00000000, 0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x00004001, 0x3f800000, 0x01000002,
+ 0x0100000a, 0x0a000038, 0x00100032, 0x00000000, 0x00101046, 0x00000000, 0x00004002, 0x3acccccd,
+ 0x3b088889, 0x00000000, 0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x00004001, 0xbf800000,
+ 0x01000002, 0x01000017, 0x06000056, 0x00100082, 0x00000000, 0x0020801a, 0x00000000, 0x00000000,
+ 0x0b000048, 0x001020f2, 0x00000000, 0x00100246, 0x00000000, 0x00107e46, 0x00000000, 0x00106000,
+ 0x00000000, 0x0010003a, 0x00000000, 0x0100003e,
+ };
+ static const D3D12_SHADER_BYTECODE ps_cube = {ps_cube_code, sizeof(ps_cube_code)};
+ static const DWORD ps_cube_array_code[] =
+ {
+#if 0
+ TextureCubeArray t;
+ SamplerState s;
+
+ uint face;
+ uint level;
+ uint cube;
+
+ float4 main(float4 position : SV_POSITION) : SV_Target
+ {
+ float2 p;
+ p.x = position.x / 640.0f;
+ p.y = position.y / 480.0f;
+
+ float3 coord;
+ switch (face)
+ {
+ case 0:
+ coord = float3(1.0f, p.x, p.y);
+ break;
+ case 1:
+ coord = float3(-1.0f, p.x, p.y);
+ break;
+ case 2:
+ coord = float3(p.x, 1.0f, p.y);
+ break;
+ case 3:
+ coord = float3(p.x, -1.0f, p.y);
+ break;
+ case 4:
+ coord = float3(p.x, p.y, 1.0f);
+ break;
+ case 5:
+ default:
+ coord = float3(p.x, p.y, -1.0f);
+ break;
+ }
+ return t.SampleLevel(s, float4(coord, cube), level);
+ }
+#endif
+ 0x43425844, 0xb8d5b94a, 0xdb4be034, 0x183aed19, 0xad4af415, 0x00000001, 0x00000328, 0x00000003,
+ 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
+ 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000030f, 0x505f5653, 0x5449534f, 0x004e4f49,
+ 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
+ 0x00000000, 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x0000028c, 0x00000041,
+ 0x000000a3, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000,
+ 0x00000000, 0x04005058, 0x00107000, 0x00000000, 0x00005555, 0x04002064, 0x00101032, 0x00000000,
+ 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x0400004c, 0x0020800a,
+ 0x00000000, 0x00000000, 0x03000006, 0x00004001, 0x00000000, 0x05000036, 0x00100012, 0x00000000,
+ 0x00004001, 0x3f800000, 0x0a000038, 0x00100062, 0x00000000, 0x00101106, 0x00000000, 0x00004002,
+ 0x00000000, 0x3acccccd, 0x3b088889, 0x00000000, 0x01000002, 0x03000006, 0x00004001, 0x00000001,
+ 0x05000036, 0x00100012, 0x00000000, 0x00004001, 0xbf800000, 0x0a000038, 0x00100062, 0x00000000,
+ 0x00101106, 0x00000000, 0x00004002, 0x00000000, 0x3acccccd, 0x3b088889, 0x00000000, 0x01000002,
+ 0x03000006, 0x00004001, 0x00000002, 0x0a000038, 0x00100052, 0x00000000, 0x00101106, 0x00000000,
+ 0x00004002, 0x3acccccd, 0x00000000, 0x3b088889, 0x00000000, 0x05000036, 0x00100022, 0x00000000,
+ 0x00004001, 0x3f800000, 0x01000002, 0x03000006, 0x00004001, 0x00000003, 0x0a000038, 0x00100052,
+ 0x00000000, 0x00101106, 0x00000000, 0x00004002, 0x3acccccd, 0x00000000, 0x3b088889, 0x00000000,
+ 0x05000036, 0x00100022, 0x00000000, 0x00004001, 0xbf800000, 0x01000002, 0x03000006, 0x00004001,
+ 0x00000004, 0x0a000038, 0x00100032, 0x00000000, 0x00101046, 0x00000000, 0x00004002, 0x3acccccd,
+ 0x3b088889, 0x00000000, 0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x00004001, 0x3f800000,
+ 0x01000002, 0x0100000a, 0x0a000038, 0x00100032, 0x00000000, 0x00101046, 0x00000000, 0x00004002,
+ 0x3acccccd, 0x3b088889, 0x00000000, 0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x00004001,
+ 0xbf800000, 0x01000002, 0x01000017, 0x06000056, 0x00100032, 0x00000001, 0x00208a66, 0x00000000,
+ 0x00000000, 0x05000036, 0x00100082, 0x00000000, 0x0010000a, 0x00000001, 0x0b000048, 0x001020f2,
+ 0x00000000, 0x00100e46, 0x00000000, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0010001a,
+ 0x00000001, 0x0100003e,
+ };
+ static const D3D12_SHADER_BYTECODE ps_cube_array = {ps_cube_array_code, sizeof(ps_cube_array_code)};
+ static const struct ps_test
+ {
+ const D3D12_SHADER_BYTECODE *ps;
+ unsigned int miplevel_count;
+ unsigned int array_size;
+ }
+ ps_tests[] =
+ {
+ {&ps_cube, 1, 6},
+ {&ps_cube, 2, 6},
+ {&ps_cube, 3, 6},
+
+ {&ps_cube_array, 1, 12},
+ {&ps_cube_array, 2, 12},
+ {&ps_cube_array, 3, 12},
+ };
+
+ memset(&desc, 0, sizeof(desc));
+ desc.rt_width = 640;
+ desc.rt_height = 480;
+ desc.rt_format = DXGI_FORMAT_R32_FLOAT;
+ desc.no_root_signature = true;
+ if (!init_test_context(&context, &desc))
+ return;
+ command_list = context.list;
+ queue = context.queue;
+
+ context.root_signature = create_texture_root_signature(context.device,
+ D3D12_SHADER_VISIBILITY_PIXEL, 3, 0);
+
+ init_pipeline_state_desc(&pso_desc, context.root_signature,
+ context.render_target_desc.Format, NULL, NULL, NULL);
+
+ heap = create_gpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 1);
+ cpu_handle = ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(heap);
+ gpu_handle = ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(heap);
+
+ ps = NULL;
+ pso = NULL;
+ for (i = 0; i < ARRAY_SIZE(ps_tests); ++i)
+ {
+ const struct ps_test *test = &ps_tests[i];
+
+ if (ps != test->ps)
+ {
+ if (pso)
+ ID3D12PipelineState_Release(pso);
+
+ ps = test->ps;
+ pso_desc.PS = *test->ps;
+ hr = ID3D12Device_CreateGraphicsPipelineState(context.device, &pso_desc,
+ &IID_ID3D12PipelineState, (void **)&pso);
+ ok(hr == S_OK, "Failed to create graphics pipeline state, hr %#x.\n", hr);
+ }
+
+ texture = create_default_texture2d(context.device, texture_size, texture_size,
+ test->array_size, test->miplevel_count, DXGI_FORMAT_R32_FLOAT,
+ D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_COPY_DEST);
+ srv_desc.Format = DXGI_FORMAT_R32_FLOAT;
+ srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
+ if (ps == &ps_cube)
+ {
+ srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE;
+ srv_desc.TextureCube.MostDetailedMip = 0;
+ srv_desc.TextureCube.MipLevels = test->miplevel_count;
+ srv_desc.TextureCube.ResourceMinLODClamp = 0.0f;
+ }
+ else
+ {
+ srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY;
+ srv_desc.TextureCubeArray.MostDetailedMip = 0;
+ srv_desc.TextureCubeArray.MipLevels = test->miplevel_count;
+ srv_desc.TextureCubeArray.First2DArrayFace = 0;
+ srv_desc.TextureCubeArray.NumCubes = test->array_size / 6;
+ srv_desc.TextureCubeArray.ResourceMinLODClamp = 0.0f;
+ }
+ ID3D12Device_CreateShaderResourceView(context.device, texture, &srv_desc, cpu_handle);
+
+ sub_resource_count = test->array_size * test->miplevel_count;
+ texture_data = calloc(sub_resource_count, sizeof(*texture_data));
+ ok(texture_data, "Failed to allocate memory.\n");
+ for (sub_resource_idx = 0; sub_resource_idx < sub_resource_count; ++sub_resource_idx)
+ {
+ data = calloc(texture_size * texture_size, sizeof(*data));
+ ok(data, "Failed to allocate memory.\n");
+ for (j = 0; j < texture_size * texture_size; ++j)
+ data[j] = sub_resource_idx;
+
+ texture_data[sub_resource_idx].pData = data;
+ texture_data[sub_resource_idx].RowPitch = texture_size * sizeof(*data);
+ texture_data[sub_resource_idx].SlicePitch = 0;
+ }
+ upload_texture_data(texture, texture_data, sub_resource_count, queue, command_list);
+ for (sub_resource_idx = 0; sub_resource_idx < sub_resource_count; ++sub_resource_idx)
+ free((void *)texture_data[sub_resource_idx].pData);
+ free(texture_data);
+
+ reset_command_list(command_list, context.allocator);
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
+
+ for (sub_resource_idx = 0; sub_resource_idx < sub_resource_count; ++sub_resource_idx)
+ {
+ constants.face = (sub_resource_idx / test->miplevel_count) % 6;
+ constants.level = sub_resource_idx % test->miplevel_count;
+ constants.cube = (sub_resource_idx / test->miplevel_count) / 6;
+
+ ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL);
+ ID3D12GraphicsCommandList_OMSetRenderTargets(command_list, 1, &context.rtv, FALSE, NULL);
+ ID3D12GraphicsCommandList_SetGraphicsRootSignature(command_list, context.root_signature);
+ ID3D12GraphicsCommandList_SetPipelineState(command_list, pso);
+ ID3D12GraphicsCommandList_SetDescriptorHeaps(command_list, 1, &heap);
+ ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(command_list, 0, gpu_handle);
+ ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(command_list, 1, 3, &constants.face, 0);
+ ID3D12GraphicsCommandList_IASetPrimitiveTopology(command_list, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+ ID3D12GraphicsCommandList_RSSetViewports(command_list, 1, &context.viewport);
+ ID3D12GraphicsCommandList_RSSetScissorRects(command_list, 1, &context.scissor_rect);
+ ID3D12GraphicsCommandList_DrawInstanced(command_list, 3, 1, 0, 0);
+
+ transition_resource_state(command_list, context.render_target,
+ D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
+
+ check_sub_resource_float(context.render_target, 0, queue, command_list, sub_resource_idx, 0);
+
+ reset_command_list(command_list, context.allocator);
+ transition_resource_state(command_list, context.render_target,
+ D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET);
+ }
+
+ ID3D12Resource_Release(texture);
+ }
+ ID3D12PipelineState_Release(pso);
+
+ ID3D12DescriptorHeap_Release(heap);
+ destroy_test_context(&context);
+}
+
static void test_descriptor_tables(void)
{
ID3D12DescriptorHeap *heap, *sampler_heap, *heaps[2];
@@ -17380,6 +17684,7 @@ START_TEST(d3d12)
run_test(test_root_constants);
run_test(test_texture);
run_test(test_gather);
+ run_test(test_cube_maps);
run_test(test_descriptor_tables);
run_test(test_descriptor_tables_overlapping_bindings);
run_test(test_update_root_descriptors);
diff --git a/tests/vkd3d_d3d12_test.h b/tests/vkd3d_d3d12_test.h
index b4a9a442a5d2..2ebb58f997b3 100644
--- a/tests/vkd3d_d3d12_test.h
+++ b/tests/vkd3d_d3d12_test.h
@@ -318,11 +318,12 @@ static void check_sub_resource_uint_(unsigned int line, ID3D12Resource *texture,
release_resource_readback(&rb);
}
-#define create_texture(a, b, c, d, e) create_default_texture_(__LINE__, a, b, c, d, 0, e)
-#define create_default_texture(a, b, c, d, e, f) create_default_texture_(__LINE__, a, b, c, d, e, f)
-static ID3D12Resource *create_default_texture_(unsigned int line, ID3D12Device *device,
- unsigned int width, unsigned int height, DXGI_FORMAT format,
- D3D12_RESOURCE_FLAGS flags, D3D12_RESOURCE_STATES initial_state)
+#define create_default_texture(a, b, c, d, e, f) create_default_texture2d_(__LINE__, a, b, c, 1, 1, d, e, f)
+#define create_texture(a, b, c, d, e) create_default_texture(a, b, c, d, 0, e)
+#define create_default_texture2d(a, b, c, d, e, f, g, h) create_default_texture2d_(__LINE__, a, b, c, d, e, f, g, h)
+static ID3D12Resource *create_default_texture2d_(unsigned int line, ID3D12Device *device,
+ unsigned int width, unsigned int height, unsigned int array_size, unsigned int miplevel_count,
+ DXGI_FORMAT format, D3D12_RESOURCE_FLAGS flags, D3D12_RESOURCE_STATES initial_state)
{
D3D12_HEAP_PROPERTIES heap_properties;
D3D12_RESOURCE_DESC resource_desc;
@@ -336,8 +337,8 @@ static ID3D12Resource *create_default_texture_(unsigned int line, ID3D12Device *
resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
resource_desc.Width = width;
resource_desc.Height = height;
- resource_desc.DepthOrArraySize = 1;
- resource_desc.MipLevels = 1;
+ resource_desc.DepthOrArraySize = array_size;
+ resource_desc.MipLevels = miplevel_count;
resource_desc.Format = format;
resource_desc.SampleDesc.Count = 1;
resource_desc.Flags = flags;
--
2.16.4
2
1
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
configure.ac | 2 ++
libs/vkd3d/command.c | 4 ++++
libs/vkd3d/vkd3d_private.h | 8 +++++---
m4/check-functions.m4 | 7 +++++++
4 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index daae6464fae9..2773a155cd78 100644
--- a/configure.ac
+++ b/configure.ac
@@ -93,6 +93,8 @@ VKD3D_CHECK_FUNC([HAVE_BUILTIN_POPCOUNT], [__builtin_popcount], [__builtin_popco
VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_SUB_AND_FETCH], [__sync_sub_and_fetch], [__sync_sub_and_fetch((int *)0, 0)])
+VKD3D_CHECK_LIB_FUNCS([pthread_setname_np], [$PTHREAD_LIBS])
+
AM_CONDITIONAL([HAVE_WIDL], [test "x$WIDL" != "xno"])
AM_CONDITIONAL([HAVE_CROSSTARGET32], [test "x$CROSSTARGET32" != "xno"])
AM_CONDITIONAL([HAVE_CROSSTARGET64], [test "x$CROSSTARGET64" != "xno"])
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index ee1d3f6e1018..d29d18edb633 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -199,6 +199,10 @@ static void *vkd3d_fence_worker_main(void *arg)
struct vkd3d_fence_worker *worker = arg;
int rc;
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ pthread_setname_np(pthread_self(), "vkd3d_worker");
+#endif
+
for (;;)
{
if ((rc = pthread_mutex_lock(&worker->mutex)))
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index 38f0bf38e215..29611b8ccdc5 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -19,12 +19,14 @@
#ifndef __VKD3D_PRIVATE_H
#define __VKD3D_PRIVATE_H
-#define VK_NO_PROTOTYPES
-
#define COBJMACROS
#define NONAMELESSUNION
-#include "vkd3d.h"
+#define VK_NO_PROTOTYPES
+
+#include "vkd3d_common.h"
#include "vkd3d_memory.h"
+
+#include "vkd3d.h"
#include "vkd3d_shader.h"
#include <assert.h>
diff --git a/m4/check-functions.m4 b/m4/check-functions.m4
index 8bb8213153af..17082a179719 100644
--- a/m4/check-functions.m4
+++ b/m4/check-functions.m4
@@ -7,3 +7,10 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) { return [$3]; }])],
[1],
[Define to 1 if you have $2.])],
[AC_MSG_RESULT([no])])])
+
+dnl VKD3D_CHECK_LIB_FUNCS
+AC_DEFUN([VKD3D_CHECK_LIB_FUNCS],
+[vkd3d_libs_saved="$LIBS"
+LIBS="$LIBS $2"
+AC_CHECK_FUNCS([$1], [$3], [$4])
+LIBS="$vkd3d_libs_saved"])
--
2.16.4
3
2
27 Jun '18
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
include/vkd3d_d3d12.idl | 2 +-
libs/vkd3d/resource.c | 43 +++++++++++++++++++++++++++++++++++++------
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl
index 5bfc76718873..ec7df5653faa 100644
--- a/include/vkd3d_d3d12.idl
+++ b/include/vkd3d_d3d12.idl
@@ -945,7 +945,7 @@ typedef struct D3D12_TEXCUBE_ARRAY_SRV
{
UINT MostDetailedMip;
UINT MipLevels;
- UINT First2DArraySlice;
+ UINT First2DArrayFace;
UINT NumCubes;
FLOAT ResourceMinLODClamp;
} D3D12_TEXCUBE_ARRAY_SRV;
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index e45c90083229..e1a5adf3364d 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1150,6 +1150,7 @@ void d3d12_desc_create_srv(struct d3d12_desc *descriptor,
struct d3d12_device *device, struct d3d12_resource *resource,
const D3D12_SHADER_RESOURCE_VIEW_DESC *desc)
{
+ uint32_t miplevel_idx, miplevel_count, layer_idx, layer_count;
const struct vkd3d_format *format;
VkImageViewType vk_view_type;
struct vkd3d_view *view;
@@ -1174,22 +1175,52 @@ void d3d12_desc_create_srv(struct d3d12_desc *descriptor,
return;
}
- if (desc)
- FIXME("Unhandled SRV desc %p.\n", desc);
-
if (!(format = vkd3d_format_from_d3d12_resource_desc(&resource->desc, desc ? desc->Format : 0)))
{
FIXME("Failed to find format for %#x.\n", resource->desc.Format);
return;
}
+ vk_view_type = resource->desc.DepthOrArraySize > 1
+ ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D;
+ miplevel_idx = 0;
+ miplevel_count = VK_REMAINING_MIP_LEVELS;
+ layer_idx = 0;
+ layer_count = VK_REMAINING_ARRAY_LAYERS;
+ if (desc)
+ {
+ if (desc->Shader4ComponentMapping != D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING)
+ FIXME("Ignoring component mapping %#x.\n", desc->Shader4ComponentMapping);
+
+ switch (desc->ViewDimension)
+ {
+ case D3D12_SRV_DIMENSION_TEXTURECUBE:
+ vk_view_type = VK_IMAGE_VIEW_TYPE_CUBE;
+ miplevel_idx = desc->u.TextureCube.MostDetailedMip;
+ miplevel_count = desc->u.TextureCube.MipLevels;
+ layer_count = 6;
+ if (desc->u.TextureCube.ResourceMinLODClamp)
+ FIXME("Unhandled min LOD clamp %.8e.\n", desc->u.TextureCube.ResourceMinLODClamp);
+ break;
+ case D3D12_SRV_DIMENSION_TEXTURECUBEARRAY:
+ vk_view_type = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
+ miplevel_idx = desc->u.TextureCubeArray.MostDetailedMip;
+ miplevel_count = desc->u.TextureCubeArray.MipLevels;
+ layer_idx = desc->u.TextureCubeArray.First2DArrayFace;
+ layer_count = 6 * desc->u.TextureCubeArray.NumCubes;
+ if (desc->u.TextureCubeArray.ResourceMinLODClamp)
+ FIXME("Unhandled min LOD clamp %.8e.\n", desc->u.TextureCubeArray.ResourceMinLODClamp);
+ break;
+ default:
+ FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension);
+ }
+ }
+
if (!(view = vkd3d_view_create()))
return;
- vk_view_type = resource->desc.DepthOrArraySize > 1
- ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D;
if (vkd3d_create_texture_view(device, resource, format, vk_view_type,
- 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS, true, &view->u.vk_image_view) < 0)
+ miplevel_idx, miplevel_count, layer_idx, layer_count, true, &view->u.vk_image_view) < 0)
{
vkd3d_free(view);
return;
--
2.16.4
2
1
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/kernel32/tests/comm.c | 4 +---
dlls/kernel32/tests/toolhelp.c | 8 +++-----
2 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/dlls/kernel32/tests/comm.c b/dlls/kernel32/tests/comm.c
index 4fb9de1268..d671e40f87 100644
--- a/dlls/kernel32/tests/comm.c
+++ b/dlls/kernel32/tests/comm.c
@@ -410,8 +410,6 @@ static const TEST test[] =
},
};
-#define TEST_COUNT (sizeof(test) / sizeof(TEST))
-
/* This function can be useful if you are modifying the test cases and want to
output the contents of a DCB structure. */
/*static print_dcb(DCB *pdcb)
@@ -656,7 +654,7 @@ static void test_BuildCommDCB(void)
if(!port)
trace("Could not find a valid COM port. Some tests will be skipped.\n");
- for(i = 0; i < TEST_COUNT; i++)
+ for(i = 0; i < ARRAY_SIZE(test); i++)
{
char string[sizeof(test[i].string)];
diff --git a/dlls/kernel32/tests/toolhelp.c b/dlls/kernel32/tests/toolhelp.c
index c40dbc4f8f..bdb01b9824 100644
--- a/dlls/kernel32/tests/toolhelp.c
+++ b/dlls/kernel32/tests/toolhelp.c
@@ -217,8 +217,6 @@ static const char* sub_expected_modules[] =
"ntdll.dll"
};
-#define NUM_OF(x) (sizeof(x) / sizeof(x[0]))
-
static void test_module(DWORD pid, const char* expected[], unsigned num_expected)
{
HANDLE hSnapshot;
@@ -229,7 +227,7 @@ static void test_module(DWORD pid, const char* expected[], unsigned num_expected
unsigned i;
int num = 0;
- ok(NUM_OF(found) >= num_expected, "Internal: bump found[] size\n");
+ ok(ARRAY_SIZE(found) >= num_expected, "Internal: bump found[] size\n");
hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pid );
ok(hSnapshot != NULL, "Cannot create snapshot\n");
@@ -341,8 +339,8 @@ START_TEST(toolhelp)
test_process(pid, info.dwProcessId);
test_thread(pid, info.dwProcessId);
- test_module(pid, curr_expected_modules, NUM_OF(curr_expected_modules));
- test_module(info.dwProcessId, sub_expected_modules, NUM_OF(sub_expected_modules));
+ test_module(pid, curr_expected_modules, ARRAY_SIZE(curr_expected_modules));
+ test_module(info.dwProcessId, sub_expected_modules, ARRAY_SIZE(sub_expected_modules));
SetEvent(ev2);
winetest_wait_child_process( info.hProcess );
--
2.14.4
2
2
27 Jun '18
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/user32/tests/class.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c
index 92b9ad93a2..9b3b2b30f3 100644
--- a/dlls/user32/tests/class.c
+++ b/dlls/user32/tests/class.c
@@ -645,7 +645,6 @@ static void test_builtinproc(void)
"ScrollBar",
"#32770", /* dialog */
};
- static const int NUM_NORMAL_CLASSES = (sizeof(NORMAL_CLASSES)/sizeof(NORMAL_CLASSES[0]));
static const char classA[] = "deftest";
static const WCHAR classW[] = {'d','e','f','t','e','s','t',0};
WCHAR unistring[] = {0x142, 0x40e, 0x3b4, 0}; /* a string that would be destroyed by a W->A->W conversion */
@@ -656,7 +655,7 @@ static void test_builtinproc(void)
WCHAR buf[128];
ATOM atom;
HWND hwnd;
- int i;
+ unsigned int i;
pDefWindowProcA = (void *)GetProcAddress(GetModuleHandleA("user32.dll"), "DefWindowProcA");
pDefWindowProcW = (void *)GetProcAddress(GetModuleHandleA("user32.dll"), "DefWindowProcW");
@@ -771,7 +770,7 @@ static void test_builtinproc(void)
/* For most of the builtin controls both GetWindowLongPtrA and W returns a pointer that is executed directly
* by CallWindowProcA/W */
- for (i = 0; i < NUM_NORMAL_CLASSES; i++)
+ for (i = 0; i < ARRAY_SIZE(NORMAL_CLASSES); i++)
{
WNDPROC procA, procW;
hwnd = CreateWindowExA(0, NORMAL_CLASSES[i], classA, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 680, 260,
--
2.14.4
1
0
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/user32/tests/cursoricon.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/dlls/user32/tests/cursoricon.c b/dlls/user32/tests/cursoricon.c
index 95a6878e9a..3d56815848 100644
--- a/dlls/user32/tests/cursoricon.c
+++ b/dlls/user32/tests/cursoricon.c
@@ -1328,8 +1328,6 @@ static void test_LoadImage(void)
test_LoadImageFile("Cursor (invalid dwDIBOffset)", invalid_dwDIBOffset, sizeof(invalid_dwDIBOffset), "cur", 0);
}
-#undef ARRAY_SIZE
-
static void test_CreateIconFromResource(void)
{
HANDLE handle;
--
2.14.4
1
0