[PATCH] include: Add a generic available ARRAY_SIZE()
Michael Stefaniuc
mstefani at winehq.org
Tue Jul 3 18:10:37 CDT 2018
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
By popular request a generic ARRAY_SIZE().
The one in test.h is kept (with guard) for a standalone compilation.
There is no proper wine only header for this.
As ARRAY_SIZE() fits in well with CONTAINING_RECORD() and FIELD_OFFSET()
I have added it to winnt.h.
Let the controversy begin!
dlls/advapi32/advapi32_misc.h | 2 --
dlls/appwiz.cpl/appwiz.h | 2 --
dlls/avifil32/avifile_private.h | 2 --
dlls/comctl32/comctl32.h | 2 --
dlls/comdlg32/cdlg.h | 2 --
dlls/crypt32/crypt32_private.h | 2 --
dlls/d2d1/d2d1_private.h | 4 ----
dlls/d3d11/d3d11_private.h | 4 ----
dlls/d3d12/d3d12_main.c | 2 --
dlls/d3d9/d3d9_private.h | 2 --
dlls/d3drm/d3drm_private.h | 4 ----
dlls/d3dx9_36/d3dx9_private.h | 2 --
dlls/ddraw/ddraw_private.h | 2 --
dlls/dmloader/dmloader_private.h | 1 -
dlls/dwrite/dwrite_private.h | 2 --
dlls/dxgi/dxgi_private.h | 2 --
dlls/gdiplus/gdiplus_private.h | 2 --
dlls/msi/tokenize.c | 2 --
dlls/msxml3/msxml_private.h | 2 --
dlls/scrrun/scrrun_private.h | 2 --
dlls/shell32/shell32_main.h | 2 --
dlls/user32/user_private.h | 2 --
dlls/usp10/usp10_internal.h | 4 ----
dlls/wined3d/wined3d_private.h | 4 ----
dlls/winevulkan/vulkan_private.h | 4 ----
dlls/wshom.ocx/wshom_private.h | 2 --
dlls/xmllite/xmllite_private.h | 2 --
include/wine/test.h | 4 +++-
include/winnt.h | 4 ++++
programs/notepad/main.h | 2 --
programs/reg/reg.h | 1 -
programs/regedit/main.h | 2 --
programs/regedit/regproc.c | 2 --
programs/winecfg/winecfg.h | 2 --
programs/winedbg/debugger.h | 2 --
tools/make_xftmpl.c | 2 --
36 files changed, 7 insertions(+), 79 deletions(-)
diff --git a/dlls/advapi32/advapi32_misc.h b/dlls/advapi32/advapi32_misc.h
index be3873a4b4..4ced1e8a64 100644
--- a/dlls/advapi32/advapi32_misc.h
+++ b/dlls/advapi32/advapi32_misc.h
@@ -25,8 +25,6 @@
#include "winnls.h"
#include "wine/heap.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
const char * debugstr_sid(PSID sid) DECLSPEC_HIDDEN;
BOOL ADVAPI_IsLocalComputer(LPCWSTR ServerName) DECLSPEC_HIDDEN;
BOOL ADVAPI_GetComputerSid(PSID sid) DECLSPEC_HIDDEN;
diff --git a/dlls/appwiz.cpl/appwiz.h b/dlls/appwiz.cpl/appwiz.h
index d18d93aa5f..2165ce11b1 100644
--- a/dlls/appwiz.cpl/appwiz.h
+++ b/dlls/appwiz.cpl/appwiz.h
@@ -19,8 +19,6 @@
#include "wine/heap.h"
#include "wine/unicode.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
typedef enum {
ADDON_GECKO,
ADDON_MONO
diff --git a/dlls/avifil32/avifile_private.h b/dlls/avifil32/avifile_private.h
index 83e87ea989..4bf11f42a8 100644
--- a/dlls/avifil32/avifile_private.h
+++ b/dlls/avifil32/avifile_private.h
@@ -22,8 +22,6 @@
#include <windef.h>
#include <winuser.h>
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
#ifndef MAX_AVISTREAMS
#define MAX_AVISTREAMS 8
#endif
diff --git a/dlls/comctl32/comctl32.h b/dlls/comctl32/comctl32.h
index e2367aa60b..eef2072e18 100644
--- a/dlls/comctl32/comctl32.h
+++ b/dlls/comctl32/comctl32.h
@@ -38,8 +38,6 @@
extern HMODULE COMCTL32_hModule DECLSPEC_HIDDEN;
extern HBRUSH COMCTL32_hPattern55AABrush DECLSPEC_HIDDEN;
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
/* Property sheet / Wizard */
#define IDD_PROPSHEET 1006
#define IDD_WIZARD 1020
diff --git a/dlls/comdlg32/cdlg.h b/dlls/comdlg32/cdlg.h
index eebf1a9b2b..28bb7e7526 100644
--- a/dlls/comdlg32/cdlg.h
+++ b/dlls/comdlg32/cdlg.h
@@ -23,8 +23,6 @@
#include "dlgs.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
/* Common dialogs implementation globals */
#define COMDLG32_Atom MAKEINTATOM(0xa000) /* MS uses this one to identify props */
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index 95ee67c6cb..e58db989b7 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -21,8 +21,6 @@
#include "wine/list.h"
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
/* a few asn.1 tags we need */
#define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01)
#define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index d754e85d34..925fcf48ce 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -31,10 +31,6 @@
#endif
#include "dwrite_2.h"
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-#endif
-
enum d2d_brush_type
{
D2D_BRUSH_TYPE_SOLID,
diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h
index fdbb5414cd..6ec413139c 100644
--- a/dlls/d3d11/d3d11_private.h
+++ b/dlls/d3d11/d3d11_private.h
@@ -38,10 +38,6 @@
#include "wine/winedxgi.h"
#include "wine/rbtree.h"
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-#endif
-
#define MAKE_TAG(ch0, ch1, ch2, ch3) \
((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \
((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 ))
diff --git a/dlls/d3d12/d3d12_main.c b/dlls/d3d12/d3d12_main.c
index be0bd7acdf..324ad3cc4e 100644
--- a/dlls/d3d12/d3d12_main.c
+++ b/dlls/d3d12/d3d12_main.c
@@ -34,8 +34,6 @@
#include <vkd3d.h>
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
WINE_DEFAULT_DEBUG_CHANNEL(d3d12);
WINE_DECLARE_DEBUG_CHANNEL(winediag);
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index 08ea73ccdd..fc6e4af650 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -47,8 +47,6 @@
#define D3D9_TEXTURE_MIPMAP_DIRTY 0x1
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
extern const struct wined3d_parent_ops d3d9_null_wined3d_parent_ops DECLSPEC_HIDDEN;
HRESULT vdecl_convert_fvf(DWORD FVF, D3DVERTEXELEMENT9 **ppVertexElements) DECLSPEC_HIDDEN;
diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index 0f24f80d24..858911f350 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -33,10 +33,6 @@
#include "wine/heap.h"
#include "wine/list.h"
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
-#endif
-
struct d3drm_object
{
LONG ref;
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
index 6cc1126c80..930fce3ddf 100644
--- a/dlls/d3dx9_36/d3dx9_private.h
+++ b/dlls/d3dx9_36/d3dx9_private.h
@@ -32,8 +32,6 @@
#define ULONG64_MAX (~(ULONG64)0)
-#define ARRAY_SIZE(array) (sizeof(array)/sizeof(*array))
-
struct vec4
{
float x, y, z, w;
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index b8552af287..495cb8be68 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -39,8 +39,6 @@
#include "wine/list.h"
#include "wine/wined3d.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
extern const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops DECLSPEC_HIDDEN;
extern DWORD force_refresh_rate DECLSPEC_HIDDEN;
diff --git a/dlls/dmloader/dmloader_private.h b/dlls/dmloader/dmloader_private.h
index ecda299fb8..36e2bd885d 100644
--- a/dlls/dmloader/dmloader_private.h
+++ b/dlls/dmloader/dmloader_private.h
@@ -42,7 +42,6 @@
#include "dmusicf.h"
#include "dmusics.h"
-#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
/* dmloader.dll global (for DllCanUnloadNow) */
diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h
index c16c401ad1..31b977a159 100644
--- a/dlls/dwrite/dwrite_private.h
+++ b/dlls/dwrite/dwrite_private.h
@@ -24,8 +24,6 @@
#include "wine/list.h"
#include "wine/unicode.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
static const DWRITE_MATRIX identity =
{
1.0f, 0.0f,
diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h
index c05a0e81e7..4967bd425f 100644
--- a/dlls/dxgi/dxgi_private.h
+++ b/dlls/dxgi/dxgi_private.h
@@ -40,8 +40,6 @@
#include "wine/wined3d.h"
#include "wine/winedxgi.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
enum dxgi_frame_latency
{
DXGI_FRAME_LATENCY_MAX = 16,
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 25b269ba35..b2e4f1e93f 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -35,8 +35,6 @@
#include "gdiplus.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
#define GP_DEFAULT_PENSTYLE (PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_FLAT | PS_JOIN_MITER)
#define MAX_ARC_PTS (13)
#define MAX_DASHLEN (16) /* this is a limitation of gdi */
diff --git a/dlls/msi/tokenize.c b/dlls/msi/tokenize.c
index 1656fd8c3d..d1c2da9743 100644
--- a/dlls/msi/tokenize.c
+++ b/dlls/msi/tokenize.c
@@ -77,8 +77,6 @@ static const WCHAR updateW[] = {'U','P','D','A','T','E'};
static const WCHAR valuesW[] = {'V','A','L','U','E','S'};
static const WCHAR whereW[] = {'W','H','E','R','E'};
-#define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0]))
-
/*
** These are the keywords
** They MUST be in alphabetical order
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index d7039275ce..94ef66b23d 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -31,8 +31,6 @@
# error You must include config.h to use this header
#endif
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
typedef enum {
MSXML_DEFAULT = 0,
MSXML2 = 20,
diff --git a/dlls/scrrun/scrrun_private.h b/dlls/scrrun/scrrun_private.h
index d9ff2416a5..5083d30a8e 100644
--- a/dlls/scrrun/scrrun_private.h
+++ b/dlls/scrrun/scrrun_private.h
@@ -18,8 +18,6 @@
#ifndef _SCRRUN_PRIVATE_H_
#define _SCRRUN_PRIVATE_H_
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
extern HRESULT WINAPI FileSystem_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
extern HRESULT WINAPI Dictionary_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index d1b0e01cf1..11a96309e8 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -39,8 +39,6 @@
#include "wine/unicode.h"
#include "wine/list.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
/*******************************************
* global SHELL32.DLL variables
*/
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 9699297b68..7a70ae9c43 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -32,8 +32,6 @@
#define GET_WORD(ptr) (*(const WORD *)(ptr))
#define GET_DWORD(ptr) (*(const DWORD *)(ptr))
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
#define WM_SYSTIMER 0x0118
#define WM_POPUPSYSTEMMENU 0x0313
diff --git a/dlls/usp10/usp10_internal.h b/dlls/usp10/usp10_internal.h
index 369a66dd58..bd55d8694f 100644
--- a/dlls/usp10/usp10_internal.h
+++ b/dlls/usp10/usp10_internal.h
@@ -27,10 +27,6 @@
( (ULONG)_x2 << 8 ) | \
(ULONG)_x1 )
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-#endif
-
enum usp10_script
{
Script_Undefined = 0x00,
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 9aa70817f5..a25c296616 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -58,10 +58,6 @@
#include "wine/rbtree.h"
#include "wine/wgl_driver.h"
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-#endif
-
#define MAKEDWORD_VERSION(maj, min) (((maj & 0xffffu) << 16) | (min & 0xffffu))
/* Driver quirks */
diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h
index 582fb78229..353f7af36c 100644
--- a/dlls/winevulkan/vulkan_private.h
+++ b/dlls/winevulkan/vulkan_private.h
@@ -36,10 +36,6 @@
/* Magic value defined by Vulkan ICD / Loader spec */
#define VULKAN_ICD_MAGIC_VALUE 0x01CDC0DE
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-#endif
-
#define WINEVULKAN_QUIRK_GET_DEVICE_PROC_ADDR 0x00000001
struct vulkan_func
diff --git a/dlls/wshom.ocx/wshom_private.h b/dlls/wshom.ocx/wshom_private.h
index 3d5eb1b8c1..a10cf2683a 100644
--- a/dlls/wshom.ocx/wshom_private.h
+++ b/dlls/wshom.ocx/wshom_private.h
@@ -25,8 +25,6 @@
#include "ole2.h"
#include "olectl.h"
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
/* typelibs */
typedef enum tid_t {
NULL_tid,
diff --git a/dlls/xmllite/xmllite_private.h b/dlls/xmllite/xmllite_private.h
index 381dec496c..7884e27453 100644
--- a/dlls/xmllite/xmllite_private.h
+++ b/dlls/xmllite/xmllite_private.h
@@ -23,8 +23,6 @@
#include "wine/heap.h"
-#define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0]))
-
static inline void *m_alloc(IMalloc *imalloc, size_t len)
{
if (imalloc)
diff --git a/include/wine/test.h b/include/wine/test.h
index e73f40d575..22ba7e8b40 100644
--- a/include/wine/test.h
+++ b/include/wine/test.h
@@ -137,7 +137,9 @@ extern void __winetest_cdecl winetest_trace( const char *msg, ... ) WINETEST_PRI
#define todo_wine_if(is_todo) todo_if((is_todo) && !strcmp(winetest_platform, "wine"))
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#ifndef ARRAY_SIZE
+# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#endif
#ifdef NONAMELESSUNION
# define U(x) (x).u
diff --git a/include/winnt.h b/include/winnt.h
index 80a2fc33d5..7f822c4aec 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -759,6 +759,10 @@ typedef struct _MEMORY_BASIC_INFORMATION
#define CONTAINING_RECORD(address, type, field) \
((type *)((PCHAR)(address) - offsetof(type, field)))
+#ifdef __WINESRC__
+# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#endif
+
/* Types */
typedef struct _LIST_ENTRY {
diff --git a/programs/notepad/main.h b/programs/notepad/main.h
index b672be66f5..e0efef0c08 100644
--- a/programs/notepad/main.h
+++ b/programs/notepad/main.h
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#define ARRAY_SIZE(a) sizeof(a)/sizeof((a)[0])
-
#include "notepad_res.h"
#define MAX_STRING_LEN 255
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index dbce738ecd..a27399d06a 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -21,7 +21,6 @@
#include "resource.h"
-#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A))
#define MAX_SUBKEY_LEN 257
/* reg.c */
diff --git a/programs/regedit/main.h b/programs/regedit/main.h
index 55317be338..edcc90154b 100644
--- a/programs/regedit/main.h
+++ b/programs/regedit/main.h
@@ -30,8 +30,6 @@
#define SPLIT_WIDTH 5
-#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A))
-
#define MAX_NEW_KEY_LEN 128
#define KEY_MAX_LEN 1024
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 2dbbd102c6..b938b61687 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -43,8 +43,6 @@ static HKEY reg_class_keys[] = {
HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA
};
-#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A))
-
void *heap_xalloc(size_t size)
{
void *buf = heap_alloc(size);
diff --git a/programs/winecfg/winecfg.h b/programs/winecfg/winecfg.h
index f2c24a2012..110856a536 100644
--- a/programs/winecfg/winecfg.h
+++ b/programs/winecfg/winecfg.h
@@ -38,8 +38,6 @@
#define IS_OPTION_FALSE(ch) \
((ch) == 'n' || (ch) == 'N' || (ch) == 'f' || (ch) == 'F' || (ch) == '0')
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
-
extern WCHAR* current_app; /* NULL means editing global settings */
/* Use get_reg_key and set_reg_key to alter registry settings. The changes made through
diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h
index 3fc8daa804..490bd06a0c 100644
--- a/programs/winedbg/debugger.h
+++ b/programs/winedbg/debugger.h
@@ -39,8 +39,6 @@
#include "oaidl.h"
#include <wine/list.h>
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
#define ADDRSIZE (dbg_curr_process->be_cpu->pointer_size)
#define ADDRWIDTH (ADDRSIZE * 2)
diff --git a/tools/make_xftmpl.c b/tools/make_xftmpl.c
index 6a22fefc5d..49a1273bad 100644
--- a/tools/make_xftmpl.c
+++ b/tools/make_xftmpl.c
@@ -35,8 +35,6 @@
#include "windef.h"
#include "guiddef.h"
-#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
-
#define TOKEN_NAME 1
#define TOKEN_STRING 2
#define TOKEN_INTEGER 3
--
2.14.4
More information about the wine-devel
mailing list