[FFmpeg-devel] [PATCH 2/4] Make strmatch() return 1 only if the string compared against the prefix does not contain other characters which may belong to an identifier.

Michael Niedermayer michaelni
Sun Oct 31 16:25:36 CET 2010


On Sun, Oct 31, 2010 at 03:31:08PM +0100, Stefano Sabatini wrote:
> On date Sunday 2010-10-31 11:28:02 +0100, Michael Niedermayer encoded:
> > On Sun, Oct 31, 2010 at 01:30:56AM +0200, Stefano Sabatini wrote:
> > > This allows to distinguish for example to have different constants
> > > with the same prefix (e.g. "foo" and "foobar").
> > > ---
> > >  libavutil/eval.c |    4 +++-
> > >  1 files changed, 3 insertions(+), 1 deletions(-)
> > > 
> > > diff --git a/libavutil/eval.c b/libavutil/eval.c
> > > index 6e03498..27c1b6d 100644
> > > --- a/libavutil/eval.c
> > > +++ b/libavutil/eval.c
> > > @@ -103,13 +103,15 @@ double av_strtod(const char *numstr, char **tail)
> > >      return d;
> > >  }
> > >  
> > > +#define IDENTIFIER_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789"
> > > +
> > >  static int strmatch(const char *s, const char *prefix)
> > >  {
> > >      int i;
> > >      for (i=0; prefix[i]; i++) {
> > >          if (prefix[i] != s[i]) return 0;
> > >      }
> > > -    return 1;
> > > +    return !strspn(s+i, IDENTIFIER_CHARS);
> > 
> > check the char ranges directly please, this is just slow
> 
> Updated.
> -- 
> FFmpeg = Faithful and Foolish Marvellous Picky Erudite Gospel

>  eval.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 065f69f749d3e06fcd98ff769110fbecdf0870ab  0004-Make-strmatch-return-1-only-if-the-string-compared-a.patch
> From 062050ae543dd03b70b2203bd49f1caa7dc5a806 Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefano.sabatini-lala at poste.it>
> Date: Sun, 31 Oct 2010 01:27:25 +0200
> Subject: [PATCH 4/8] Make strmatch() return 1 only if the string compared against the
>  prefix does not contain other characters which may belong to an
>  identifier.
> 
> This allows to distinguish for example to have different constants
> with the same prefix (e.g. "foo" and "foobar").
> ---
>  libavutil/eval.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/libavutil/eval.c b/libavutil/eval.c
> index 98917fa..8e0b871 100644
> --- a/libavutil/eval.c
> +++ b/libavutil/eval.c
> @@ -109,7 +109,8 @@ static int strmatch(const char *s, const char *prefix)
>      for (i=0; prefix[i]; i++) {
>          if (prefix[i] != s[i]) return 0;
>      }
> -    return 1;
> +    /* return 1 only if the s identifier is terminated */
> +    return !isalnum(s[i]) && s[i] != '_';

this is locale sensitiv which is unlikely what you want.


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

It is not what we do, but why we do it that matters.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20101031/2819a7c1/attachment.pgp>



More information about the ffmpeg-devel mailing list