[Mesa-dev] [PATCH] util: require debug options to be separated by commas
Marek Olšák
maraeo at gmail.com
Thu Jan 27 09:35:12 PST 2011
On Wed, Jan 26, 2011 at 12:17 PM, José Fonseca <jfonseca at vmware.com> wrote:
> On Mon, 2011-01-24 at 20:52 -0800, Marek Olšák wrote:
> > Let's assume there are two options with names such that one is a
> substring
> > of another. Previously, if we only specified the longer one as a debug
> option,
> > the shorter one would be considered specified as well (because of
> strstr).
> > This commit fixes it by checking that each option is surrounded by
> commas.
> >
> > (a regexp would be nicer, but this is not a performance critical code)
> > ---
> > src/gallium/auxiliary/util/u_debug.c | 39
> +++++++++++++++++++++++++++++++++-
> > 1 files changed, 38 insertions(+), 1 deletions(-)
> >
> > diff --git a/src/gallium/auxiliary/util/u_debug.c
> b/src/gallium/auxiliary/util/u_debug.c
> > index 59b7613..8cf7660 100644
> > --- a/src/gallium/auxiliary/util/u_debug.c
> > +++ b/src/gallium/auxiliary/util/u_debug.c
> > @@ -180,6 +180,43 @@ debug_get_num_option(const char *name, long dfault)
> > return result;
> > }
> >
> > +static boolean str_has_option(const char *str, const char *name)
> > +{
> > + const char *substr;
> > +
> > + /* OPTION=all */
> > + if (!util_strcmp(str, "all")) {
> > + return TRUE;
> > + }
> > +
> > + /* OPTION=name */
> > + if (!util_strcmp(str, name)) {
> > + return TRUE;
> > + }
> > +
> > + substr = util_strstr(str, name);
> > +
> > + if (substr) {
> > + unsigned name_len = strlen(name);
> > +
> > + /* OPTION=name,... */
> > + if (substr == str && substr[name_len] == ',') {
> > + return TRUE;
> > + }
> > +
> > + /* OPTION=...,name */
> > + if (substr+name_len == str+strlen(str) && substr[-1] == ',') {
> > + return TRUE;
> > + }
> > +
> > + /* OPTION=...,name,... */
> > + if (substr[-1] == ',' && substr[name_len] == ',') {
> > + return TRUE;
> > + }
> > + }
> > +
> > + return FALSE;
> > +}
>
> Marek,
>
> The intention is good -- it would be nice to get options obeyed properly
> --, but this will fail to find "foo" in "OPTION=prefixfoosuffix,foo", so
> it's replacing a bug with another.
>
> I'd prefer we stop using strstr completely, and instead do:
> 1 - find the first ',' or '\0' in the string
> 2 - compare the previous characters with the option being searched, and
> return TRUE if matches
> 3 - if it was ',' go back to 1, but starting from character after ','.
> 4 - otherwise return FALSE
>
> It should be robust and almost the same amount of code.
>
Alright. I'll fix it.
Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20110127/1d8252ff/attachment.htm>
More information about the mesa-dev
mailing list