X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=service%2Ftrigger.c;h=97a06bb57d1a4bcf4769c4c81831d35b4456a3be;hb=9053da98b552f73d58223acc2b19f8368dcf5977;hp=9fb77cd361ac6e0d75b8349ab702c7565eebe94c;hpb=0467aebb79f64d1c9d05a84367fda7c02c4ea6b8;p=project%2Fprocd.git diff --git a/service/trigger.c b/service/trigger.c index 9fb77cd..97a06bb 100644 --- a/service/trigger.c +++ b/service/trigger.c @@ -323,14 +323,22 @@ void trigger_init(void) q.max_running_tasks = 1; } +static bool trigger_match(const char *event, const char *match) +{ + char *wildcard = strstr(match, ".*"); + if (wildcard) + return !strncmp(event, match, wildcard - match); + return !strcmp(event, match); +} + void trigger_event(const char *type, struct blob_attr *data) { struct trigger *t; list_for_each_entry(t, &triggers, list) { - if (t->pending || t->remove) + if (t->remove) continue; - if (!strcmp(t->type, type)) { + if (trigger_match(type, t->type)) { if (t->timeout) { free(t->data); t->data = blob_memdup(data);