From 9a304ebddac4deb4992ea931ea1131b639798b3b Mon Sep 17 00:00:00 2001 From: José Bollo Date: Fri, 22 Sep 2017 15:22:54 +0200 Subject: Allow pure dynamic bindings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Activates the new internal interfaces Change-Id: I8f51cd271f66a0216ffdf03626300bb5964a70f9 Signed-off-by: José Bollo --- src/afb-api-so-vdyn.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/afb-api-so-vdyn.c (limited to 'src/afb-api-so-vdyn.c') diff --git a/src/afb-api-so-vdyn.c b/src/afb-api-so-vdyn.c new file mode 100644 index 00000000..c2ac2cf2 --- /dev/null +++ b/src/afb-api-so-vdyn.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2016, 2017 "IoT.bzh" + * Author José Bollo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define _GNU_SOURCE + +#include +#include + +#include "afb-api-so-vdyn.h" +#include "afb-export.h" +#include "verbose.h" + +/* + * names of symbols + */ +static const char afb_api_so_vdyn_entry[] = "afbBindingVdyn"; + +/* + * Description of a binding + */ +static int vdyn_preinit(void *closure, struct afb_dynapi *dynapi) +{ + int (*entry)(struct afb_dynapi*) = closure; + return entry(dynapi); +} + +int afb_api_so_vdyn_add(const char *path, void *handle, struct afb_apiset *apiset) +{ + int rc; + int (*entry)(void*, struct afb_dynapi*); + struct afb_export *export; + + entry = dlsym(handle, afb_api_so_vdyn_entry); + if (!entry) + return 0; + + INFO("binding [%s] looks like an AFB binding Vdyn", path); + + export = afb_export_create_vdyn(apiset, path, NULL); + if (!export) { + ERROR("can't create export for %s", path); + return -1; + } + + INFO("binding [%s] calling dynamic initialisation %s", path, afb_api_so_vdyn_entry); + rc = afb_export_preinit_vdyn(export, vdyn_preinit, entry); + afb_export_destroy(export); + return rc < 0 ? rc : 1; +} + -- cgit 1.2.3-korg