From: René Scharfe Date: Mon, 4 Oct 2010 10:53:11 +0000 (+0200) Subject: work around buggy S_ISxxx(m) implementations X-Git-Tag: v1.7.3.2~21 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/b90d9b889588ca1cfd5667d1fa703d976edd71ee?ds=inline;hp=b90d9b889588ca1cfd5667d1fa703d976edd71ee work around buggy S_ISxxx(m) implementations There are buggy implementations of S_ISxxx(m) macros on some platforms (e.g. NetBSD). The issue is that NetBSD doesn't take care to wrap its macro arguments in parentheses, so on Linux and sane systems we have S_ISREG(m) defined as something like: (((m) & S_IFMT) == S_IFREG) But on NetBSD: ((m & _S_IFMT) == _S_IFREG) Since a caller in builtin/diff.c called our macro as `S_IFREG | 0644' this bug introduced a logic error on NetBSD, since the precedence of bit-wise & is higher than | in C. [jc: took change description from Ævar Arnfjörð Bjarmason's patch] Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano ---