[libvirt] [PATCH] build: Fix prohibit_int_ijk (and iijjkk) on RHEL 5

Claudio Bley cbley at av-test.de
Wed Oct 23 08:33:21 UTC 2013


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 at 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




More information about the libvir-list mailing list