[Mesa-dev] Mesa (master): util: require debug options to be separated by commas

Michal Krol michal at vmware.com
Wed Jan 26 01:59:53 PST 2011


On 2011-01-26 09:48, Marek Olšák wrote:
> Module: Mesa
> Branch: master
> Commit: c7c733545a19aab3e2b954153b9348ebe3147368
> URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7c733545a19aab3e2b954153b9348ebe3147368
>
> Author: Marek Olšák<maraeo at gmail.com>
> Date:   Mon Jan 24 23:41:51 2011 +0100
>
> util: require debug options to be separated by commas
>
> 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.
>

Marek,

What about just checking whether the preceding and trailing character is 
not alphanumeric?

It's nice to get it fixed, but changing the way config options are 
specified might break development setups on a few people's machines.

Thanks.


> (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;
> +}
>
>   unsigned long
>   debug_get_flags_option(const char *name,
> @@ -207,7 +244,7 @@ debug_get_flags_option(const char *name,
>      else {
>         result = 0;
>         while( flags->name ) {
> -	 if (!util_strcmp(str, "all") || util_strstr(str, flags->name ))
> +	 if (str_has_option(str, flags->name))
>   	    result |= flags->value;
>   	 ++flags;
>         }
>
> _______________________________________________
> mesa-commit mailing list
> mesa-commit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-commit



More information about the mesa-dev mailing list