mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
util: fix parsing debug options
So that 'foo' can be found in: OPTION=prefixfoosuffix,foo Also allow that debug options can be separated by a non-alphanumeric characters instead of just commas.
This commit is contained in:
parent
db299a9f82
commit
387fe8dd47
1 changed files with 26 additions and 20 deletions
|
|
@ -44,6 +44,7 @@
|
|||
#include "util/u_surface.h"
|
||||
|
||||
#include <limits.h> /* CHAR_BIT */
|
||||
#include <ctype.h> /* isalnum */
|
||||
|
||||
void _debug_vprintf(const char *format, va_list ap)
|
||||
{
|
||||
|
|
@ -182,36 +183,41 @@ debug_get_num_option(const char *name, long dfault)
|
|||
|
||||
static boolean str_has_option(const char *str, const char *name)
|
||||
{
|
||||
const char *substr;
|
||||
/* Empty string. */
|
||||
if (!*str) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 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) {
|
||||
/* Find 'name' in 'str' surrounded by non-alphanumeric characters. */
|
||||
{
|
||||
const char *start = str;
|
||||
unsigned name_len = strlen(name);
|
||||
|
||||
/* OPTION=name,... */
|
||||
if (substr == str && substr[name_len] == ',') {
|
||||
return TRUE;
|
||||
}
|
||||
/* 'start' is the beginning of the currently-parsed word,
|
||||
* we increment 'str' each iteration.
|
||||
* if we find either the end of string or a non-alphanumeric character,
|
||||
* we compare 'start' up to 'str-1' with 'name'. */
|
||||
|
||||
/* OPTION=...,name */
|
||||
if (substr+name_len == str+strlen(str) && substr[-1] == ',') {
|
||||
return TRUE;
|
||||
}
|
||||
while (1) {
|
||||
if (!*str || !isalnum(*str)) {
|
||||
if (str-start == name_len &&
|
||||
!memcmp(start, name, name_len)) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* OPTION=...,name,... */
|
||||
if (substr[-1] == ',' && substr[name_len] == ',') {
|
||||
return TRUE;
|
||||
if (!*str) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
start = str+1;
|
||||
}
|
||||
|
||||
str++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue