- if(ch.res_class && ch.res_name) {
- for(i = 0; i < len; i++)
- if(!strncmp(rule[i].class, ch.res_class, sizeof(rule[i].class))
- && !strncmp(rule[i].instance, ch.res_name, sizeof(rule[i].instance)))
- {
- for(j = 0; j < TLast; j++)
+ snprintf(classinst, sizeof(classinst), "%s:%s",
+ ch.res_class ? ch.res_class : "",
+ ch.res_name ? ch.res_name : "");
+ for(i = 0; !matched && i < len; i++) {
+ if(!regcomp(®ex, rule[i].pattern, 0)) {
+ if(!regexec(®ex, classinst, 1, &tmp, 0)) {
+ for(j = 0; j < TLast; j++) {
+ if(rule[i].tags[j])
+ matched = True;