static int load_plugin(args_t *args, const char *fname, int exit_on_error, plugin_t *plugin) { plugin->name = strdup(fname); plugin->handle = dlopen_plugin(args, fname); if ( !plugin->handle ) { if ( exit_on_error ) { print_plugin_usage_hint(); error("Could not load \"%s\".\n\n", fname); } return -1; } dlerror(); plugin->init = (dl_init_f) dlsym(plugin->handle, "init"); char *ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } plugin->version = (dl_version_f) dlsym(plugin->handle, "version"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } plugin->about = (dl_about_f) dlsym(plugin->handle, "about"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } plugin->usage = (dl_about_f) dlsym(plugin->handle, "usage"); ret = dlerror(); if ( ret ) plugin->usage = plugin->about; plugin->process = (dl_process_f) dlsym(plugin->handle, "process"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } plugin->destroy = (dl_destroy_f) dlsym(plugin->handle, "destroy"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } return 0; }
static int load_plugin(args_t *args, const char *fname, int exit_on_error, plugin_t *plugin) { plugin->name = strdup(fname); plugin->handle = dlopen_plugin(args, fname); if ( !plugin->handle ) { if ( exit_on_error ) { print_plugin_usage_hint(); error("Could not load \"%s\".\n\n", fname); } return -1; } dlerror(); plugin->init = (dl_init_f) dlsym(plugin->handle, "init"); char *ret = dlerror(); if ( ret ) plugin->init = NULL; else if ( args->verbose ) fprintf(stderr,"\tinit .. ok\n"); plugin->run = (dl_run_f) dlsym(plugin->handle, "run"); ret = dlerror(); if ( ret ) plugin->run = NULL; else if ( args->verbose ) fprintf(stderr,"\trun .. ok\n"); if ( !plugin->init && !plugin->run ) { if ( exit_on_error ) error("Could not initialize %s, neither run or init found \n", plugin->name); else if ( args->verbose ) fprintf(stderr,"\tinit/run .. not found\n"); return -1; } plugin->version = (dl_version_f) dlsym(plugin->handle, "version"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s, version string not found\n", plugin->name); else if ( args->verbose ) fprintf(stderr,"\tversion .. not found\n"); return -1; } plugin->about = (dl_about_f) dlsym(plugin->handle, "about"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } plugin->usage = (dl_about_f) dlsym(plugin->handle, "usage"); ret = dlerror(); if ( ret ) plugin->usage = plugin->about; if ( plugin->run ) return 0; plugin->process = (dl_process_f) dlsym(plugin->handle, "process"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } plugin->destroy = (dl_destroy_f) dlsym(plugin->handle, "destroy"); ret = dlerror(); if ( ret ) { if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret); return -1; } return 0; }