before i make a fool of myself on the main LKML, perhaps someone can
verify that some code is as strange as i think it is.
from include/linux/netfilter/xt_sctp.h
...
#define ELEMCOUNT(x) (sizeof(x)/sizeof(x[0]))
...
#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
({ \
int i; \
int flag = 1; \
for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \
if (chunkmap[i]) { \
flag = 0; \
break; \
} \
} \
flag; \
})
...
so ELEMCOUNT() is clearly just an alternative to the more common
ARRAY_SIZE() macro. but calling the macro SCTP_CHUNKMAP_IS_CLEAR()
pretty clearly assumes that you can determine the array size of the
macro parameter "chunkmap". however, from the source file
net/netfilter/xt_sctp.c, we have:
...
static inline bool
match_packet(const struct sk_buff *skb,
unsigned int offset,
const u_int32_t *chunkmap, <----- only a *pointer*
...
switch (chunk_match_type) {
case SCTP_CHUNK_MATCH_ALL:
return SCTP_CHUNKMAP_IS_CLEAR(chunkmap);
...
i don't see how you can reasonably call the macro
SCTP_CHUNKMAP_IS_CLEAR() with a *pointer* to an array and expect that
macro to be able to determine the "size" of that array. AFAIK,
wouldn't you just get the answer "1" as the alleged size?
or is it a bad idea that i've been up all night again?
rday
--
========================================================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA
http://crashcourse.ca
========================================================================
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ