[PATCH] kernel32/tests: Use the available ARRAY_SIZE() macro

Michael Stefaniuc mstefani at winehq.org
Wed Jun 27 13:56:45 CDT 2018


Signed-off-by: Michael Stefaniuc <mstefani at 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




More information about the wine-devel mailing list