static void freepattern(struct pattern *pat)
{
struct rule **rule;
+ struct headmod *head;
for(rule = pat->rules; *rule; rule++)
freerule(*rule);
+ while((head = pat->headers) != NULL) {
+ pat->headers = head->next;
+ free(head->name);
+ free(head->value);
+ free(head);
+ }
if(pat->childnm != NULL)
free(pat->childnm);
freeca(pat->fchild);
{
struct pattern *pat;
struct rule *rule;
+ struct headmod *head;
int sl;
if(!strcmp(s->argv[0], "match")) {
pat->childnm = sstrdup(s->argv[1]);
} else if(!strcmp(s->argv[0], "fork")) {
pat->fchild = cadup(s->argv + 1);
+ } else if(!strcmp(s->argv[0], "set")) {
+ if(s->argc < 3) {
+ flog(LOG_WARNING, "%s:%i: missing header name or pattern for `set' directive", s->file, s->lno);
+ continue;
+ }
+ omalloc(head);
+ head->name = sstrdup(s->argv[1]);
+ head->value = sstrdup(s->argv[2]);
+ head->next = pat->headers;
+ pat->headers = head;
} else if(!strcmp(s->argv[0], "end") || !strcmp(s->argv[0], "eof")) {
break;
} else {
for(cf = cflist; cf != NULL; cf = cf->next) {
if(!strcmp(cf->path, path)) {
if(now - cf->lastck > 5) {
+ cf->lastck = now;
if(stat(fn, &sb) || (sb.st_mtime != cf->mtime))
break;
}
- cf->lastck = now;
return(cf);
}
}