From: José Bollo Date: Wed, 31 Jan 2018 16:15:27 +0000 (+0100) Subject: afb-evt: Add event creation with prefix X-Git-Tag: flounder_5.99.1~91 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fapp-framework-binder.git;a=commitdiff_plain;h=a3245aed48dca435b437089bc81353da352fc0ce afb-evt: Add event creation with prefix Change-Id: I2fd35e8ed59c28f4283be698a2586cdae5f7c8cf Signed-off-by: José Bollo --- diff --git a/src/afb-evt.c b/src/afb-evt.c index 9937c1a6..0f24b8e9 100644 --- a/src/afb-evt.c +++ b/src/afb-evt.c @@ -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' */ diff --git a/src/afb-evt.h b/src/afb-evt.h index 901bfbb2..76152a8b 100644 --- a/src/afb-evt.h +++ b/src/afb-evt.h @@ -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); diff --git a/src/afb-export.c b/src/afb-export.c index 98964bf9..840bd919 100644 --- a/src/afb-export.c +++ b/src/afb-export.c @@ -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)