switch to _DEFAULT_SOURCE for modern glibc compat
[project/procd.git] / service / trigger.c
index f450401..ced758b 100644 (file)
@@ -90,6 +90,8 @@ static void q_job_run(struct runqueue *q, struct runqueue_task *t)
 
 static void trigger_free(struct trigger *t)
 {
+       json_script_free(&t->jctx);
+       uloop_timeout_cancel(&t->delay);
        free(t->data);
        list_del(&t->list);
        free(t);
@@ -321,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);