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<mar...@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-com...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev