Subject: kern/10366: there is no 'how many elements' macro in the kernel.
To: None <gnats-bugs@gnats.netbsd.org>
From: None <cgd@netbsd.org>
List: netbsd-bugs
Date: 06/14/2000 12:05:26
>Number:         10366
>Category:       kern
>Synopsis:       there is no 'how many elements' macro in the kernel.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Wed Jun 14 12:06:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Chris Demetriou
>Release:        NetBSD-current as of today (20000614)
>Organization:
>Environment:
N/A
>Description:
The kernel headers (most notably sys/param.h) define lots of
convenience macros, e.g. howmany(), powerof2(), etc. for kernel
code.

One which is notably missing is a 'how many array elements' macro,
which implemented something like:

#define foo(x)	(sizeof x / sizeof x[0])

where 'x' is a statically-initialized array, and the value 
is the number of elements in that array.

there's a bunch of kernel code which does things like:

	const struct foo bar[] = { ... many entries ... };
	const int bar_size = sizeof bar / sizeof bar[0];

this is wasteful, and error-prone.
>How-To-Repeat:


>Fix:

Pick a name, and commit it.  I'd have done that myself, if any two
people could agree on a name, but don't have time to spend to gather
that consensus.

my personal favorite name, btw, is howmanyelems() (a la howmany()).

>Release-Note:
>Audit-Trail:
>Unformatted: