afb-evt: Add event creation with prefix
authorJosé Bollo <jose.bollo@iot.bzh>
Wed, 31 Jan 2018 16:15:27 +0000 (17:15 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Wed, 31 Jan 2018 16:17:16 +0000 (17:17 +0100)
Change-Id: I2fd35e8ed59c28f4283be698a2586cdae5f7c8cf
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/afb-evt.c
src/afb-evt.h
src/afb-export.c

index 9937c1a..0f24b8e 100644 (file)
@@ -351,6 +351,26 @@ error:
        return NULL;
 }
 
+/*
+ * Creates an event of name 'prefix'/'name' and returns it or NULL on error.
+ */
+struct afb_evtid *afb_evt_evtid_create2(const char *prefix, const char *name)
+{
+       size_t prelen, postlen;
+       char *fullname;
+
+       /* makes the event fullname */
+       prelen = strlen(prefix);
+       postlen = strlen(name);
+       fullname = alloca(prelen + postlen + 2);
+       memcpy(fullname, prefix, prelen);
+       fullname[prelen] = '/';
+       memcpy(fullname + prelen + 1, name, postlen + 1);
+
+       /* create the event */
+       return afb_evt_evtid_create(fullname);
+}
+
 /*
  * increment the reference count of the event 'evtid'
  */
@@ -653,6 +673,15 @@ struct afb_eventid *afb_evt_eventid_create(const char *fullname)
        return afb_evt_eventid_from_evtid(afb_evt_evtid_create(fullname));
 }
 
+/*
+ * Creates an event of name 'prefix'/'name' and returns it.
+ * Returns an event with closure==NULL in case of error.
+ */
+struct afb_eventid *afb_evt_eventid_create2(const char *prefix, const char *name)
+{
+       return afb_evt_eventid_from_evtid(afb_evt_evtid_create2(prefix, name));
+}
+
 /*
  * Returns the fullname of the 'eventid'
  */
index 901bfbb..76152a8 100644 (file)
@@ -40,6 +40,7 @@ extern struct afb_evt_listener *afb_evt_listener_addref(struct afb_evt_listener
 extern void afb_evt_listener_unref(struct afb_evt_listener *listener);
 
 extern struct afb_evtid *afb_evt_evtid_create(const char *fullname);
+extern struct afb_evtid *afb_evt_evtid_create2(const char *prefix, const char *name);
 
 extern struct afb_evtid *afb_evt_evtid_addref(struct afb_evtid *evtid);
 extern struct afb_evtid *afb_evt_evtid_hooked_addref(struct afb_evtid *evtid);
@@ -66,6 +67,7 @@ extern void afb_evt_update_hooks();
 
 
 extern struct afb_eventid *afb_evt_eventid_create(const char *fullname);
+extern struct afb_eventid *afb_evt_eventid_create2(const char *prefix, const char *name);
 extern const char *afb_evt_eventid_fullname(struct afb_eventid *eventid);
 extern int afb_evt_eventid_id(struct afb_eventid *eventid);
 extern struct afb_eventid *afb_evt_eventid_addref(struct afb_eventid *eventid);
index 98964bf..840bd91 100644 (file)
@@ -153,8 +153,6 @@ static void old_vverbose_cb(void *closure, int level, const char *file, int line
 
 static struct afb_eventid *eventid_make_cb(void *closure, const char *name)
 {
-       size_t plen, nlen;
-       char *event;
        struct afb_export *export = closure;
 
        /* check daemon state */
@@ -164,16 +162,8 @@ static struct afb_eventid *eventid_make_cb(void *closure, const char *name)
                return NULL;
        }
 
-       /* makes the event name */
-       plen = strlen(export->apiname);
-       nlen = strlen(name);
-       event = alloca(nlen + plen + 2);
-       memcpy(event, export->apiname, plen);
-       event[plen] = '/';
-       memcpy(event + plen + 1, name, nlen + 1);
-
        /* create the event */
-       return afb_evt_eventid_create(event);
+       return afb_evt_eventid_create2(export->apiname, name);
 }
 
 static struct afb_event event_make_cb(void *closure, const char *name)