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(a)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