
At Tue, 22 Oct 2013 23:09:20 +0100, Martin Kletzander wrote:
On Tue, Oct 22, 2013 at 09:52:30PM +0100, Eric Blake wrote:
On 10/22/2013 05:19 PM, Martin Kletzander wrote:
On RHEL 5, make syntax-check was failing because even strings like 'int isTempChain' matched the 'int i' rule. To be honest, I haven't found the root cause, but the change added makes it work as expected and keeps the proper behavior on newer systems as well.
Signed-off-by: Martin Kletzander <mkletzan@redhat.com> ---
Notes: I'm not pushing this one as a build breaker since I haven't found the root cause, so feel free to object and fix it differently.
cfg.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cfg.mk b/cfg.mk index 56821e2..e9da282 100644 --- a/cfg.mk +++ b/cfg.mk @@ -555,12 +555,12 @@ sc_avoid_attribute_unused_in_header: $(_sc_search_regexp)
sc_prohibit_int_ijk: - @prohibit='\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' \ + @prohibit='\<(int|unsigned) ([^(]* )*(i|j|k)\>(\s|,|;)' \
What version of grep on RHEL 5? (I'm without access to my normal RHEL 5 VM at the moment.) I'm not seeing an obvious entry in grep's NEWS file, but suspect it may be a bug in that old of a grep rather than in our regex. At any rate, I agree with the fix:
The thing is that when I tried reproducing it using only grep, the regexp and the file, there was no match.
Here are the version-related things:
# grep -V grep (GNU grep) 2.5.1 # rpm -qf $(which grep) grep-2.5.1-55.el5
// Feel free to stop by tomorrow since we're both on KVM Forum, I // can't express how much interested I am in finding the root cause // of the regexp failure.
Seems \s is buggy in this grep version with a non UTF-8 locale setting. Observe: $ LANG=en_US.UTF-8 grep -nE '\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' src/conf/interface_conf.h $ LANG=C grep -nE '\<(int|unsigned) ([^(]* )*(i|j|k)(\s|,|;)' src/conf/interface_conf.h 135: int autoconf; /* only useful if family is ipv6 */ 167: unsigned int active:1; /* 1 if interface is active (up) */ Alas, grep does not colorize anything in the output line in that case (even with --color=always), just as if it does not match anything. According to grep's info pages \s should be equivalent to [[:space:]], but it is not, as the latter works alright: $ LANG=C grep -nE '\<(int|unsigned) ([^(]*)*(i|j|k)([[:space:]]|,|;)' src/conf/interface_conf.h So, I think the right fix would be to avoid \s altogether and use [[:space:]] instead. Claudio -- AV-Test GmbH, Henricistraße 20, 04155 Leipzig, Germany Phone: +49 341 265 310 19 Web:<http://www.av-test.org> Eingetragen am / Registered at: Amtsgericht Stendal (HRB 114076) Geschaeftsfuehrer (CEO): Andreas Marx, Guido Habicht, Maik Morgenstern