add wildcard support to trigger matching code
authorJohn Crispin <blogic@openwrt.org>
Wed, 4 Jun 2014 18:36:03 +0000 (19:36 +0100)
committerJohn Crispin <blogic@openwrt.org>
Thu, 5 Jun 2014 10:45:15 +0000 (11:45 +0100)
Signed-off-by: John Crispin <blogic@openwrt.org>
service/trigger.c
service/watch.c

index 9fb77cd361ac6e0d75b8349ab702c7565eebe94c..ced758baefadf2ac2e6d2926512cc1aa24fd8665 100644 (file)
@@ -323,6 +323,14 @@ void trigger_init(void)
        q.max_running_tasks = 1;
 }
 
+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;
@@ -330,7 +338,7 @@ void trigger_event(const char *type, struct blob_attr *data)
        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);
index 1d7cf786175dfa33b15ce2e7712c23276d82e240..fd44a163825d524f83c801d0c4bcbaca0d42cdc1 100644 (file)
@@ -104,7 +104,7 @@ watch_notify_cb(struct ubus_context *ctx, struct ubus_object *obj,
                char *str;
 
                str = blobmsg_format_json(msg, true);
-               LOG("Received ubus notify '%s': %s\n", method, str);
+               DEBUG(3, "Received ubus notify '%s': %s\n", method, str);
                free(str);
        }