struct json_object *result;
struct json_object *obj;
struct afb_export *iter;
+ char *path;
/* clone the globals */
if (json_object_object_get_ex(configuration, "*", &obj))
/* add library path */
for (iter = export ; iter && !iter->path ; iter = iter->creator);
- if (iter)
- json_object_object_add(result, "binding-path", json_object_new_string(iter->path));
+ if (iter) {
+ path = realpath(iter->path, NULL);
+ json_object_object_add(result, "binding-path", json_object_new_string(path));
+ free(path);
+ }
export->settings = result;
return result;
if (!fmt || vasprintf(&p, fmt, args) < 0)
vverbose(level, file, line, function, fmt, args);
else {
- verbose(level, file, line, function, "[API %s] %s", export->api.apiname, p);
+ verbose(level, file, line, function, (verbose_is_colorized() == 0 ? "[API %s] %s" : COLOR_API "[API %s]" COLOR_DEFAULT " %s"), export->api.apiname, p);
free(p);
}
}
int rc, rc2;
char *iter, *end, save;
+ /* emit a warning about unexpected require in preinit */
+ if (export->state == Api_State_Pre_Init)
+ WARNING("[API %s] requiring apis in pre-init may lead to unexpected result (requires%s: %s)",
+ export->api.apiname, initialized ? " initialized" : "", name);
+
/* scan the names in a local copy */
rc = 0;
iter = strdupa(name);
/* search the handler */
handler = export->event_handlers;
while (handler) {
- if (fnmatch(handler->pattern, event, 0)) {
+ if (!fnmatch(handler->pattern, event, 0)) {
if (!(export->hooksvc & afb_hook_flag_api_on_event_handler))
handler->callback(handler->closure, event, object, to_api_x3(export));
else {