From: Elia Pinto Date: Thu, 30 Apr 2015 12:44:14 +0000 (+0200) Subject: git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array X-Git-Tag: v2.4.4~13^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/89c855ed3cbe64bea93ea081d0e96077e9ee8517?hp=89c855ed3cbe64bea93ea081d0e96077e9ee8517 git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array To get number of elements in an array git use the ARRAY_SIZE macro defined as: #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) The problem with it is a possibility of mistakenly passing to it a pointer instead an array. The ARRAY_SIZE macro as conventionally defined does not provide good type-safety and the open-coded approach is more fragile, more verbose and provides no improvement in type-safety. Use instead a different but compatible ARRAY_SIZE() macro, which will also break compile if you try to use it on a pointer. This implemention revert to the original code if the compiler doesn't know the typeof and __builtin_types_compatible_p GCC extensions. This can ensure our code is robust to changes, without needing a gratuitous macro or constant. A similar ARRAY_SIZE implementation also exists in the linux kernel. Credits to Rusty Russell and his ccan library. Signed-off-by: Elia Pinto Signed-off-by: Junio C Hamano ---