X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=service%2Ftrigger.c;h=ced758baefadf2ac2e6d2926512cc1aa24fd8665;hp=480367b05bc37c8ac7766db9fbe8829166b1f1cb;hb=f45672d80bf2fec4ccb7363de1da6adb9e3f4421;hpb=1a555f67c7de2b942aa188840ab97fb0e518c1ca diff --git a/service/trigger.c b/service/trigger.c index 480367b..ced758b 100644 --- a/service/trigger.c +++ b/service/trigger.c @@ -323,14 +323,22 @@ void trigger_init(void) q.max_running_tasks = 1; } -void trigger_event(char *type, struct blob_attr *data) +static int 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) continue; - if (!strcmp(t->type, type)) { + if (!trigger_match(type, t->type)) { if (t->timeout) { free(t->data); t->data = blob_memdup(data);