static int dt_imageio_load_modules_format(dt_imageio_t *iio) { iio->plugins_format = NULL; GList *res = NULL; dt_imageio_module_format_t *module; char plugindir[1024], plugin_name[256]; const gchar *d_name; dt_loc_get_plugindir(plugindir, sizeof(plugindir)); g_strlcat(plugindir, "/plugins/imageio/format", sizeof(plugindir)); GDir *dir = g_dir_open(plugindir, 0, NULL); if(!dir) return 1; const int name_offset = strlen(SHARED_MODULE_PREFIX), name_end = strlen(SHARED_MODULE_PREFIX) + strlen(SHARED_MODULE_SUFFIX); while((d_name = g_dir_read_name(dir))) { // get lib*.so if(!g_str_has_prefix(d_name, SHARED_MODULE_PREFIX)) continue; if(!g_str_has_suffix(d_name, SHARED_MODULE_SUFFIX)) continue; strncpy(plugin_name, d_name+name_offset, strlen(d_name)-name_end); plugin_name[strlen(d_name)-name_end] = '\0'; module = (dt_imageio_module_format_t *)malloc(sizeof(dt_imageio_module_format_t)); gchar *libname = g_module_build_path(plugindir, (const gchar *)plugin_name); if(dt_imageio_load_module_format(module, libname, plugin_name)) { free(module); continue; } module->gui_data = NULL; module->gui_init(module); if(module->widget) g_object_ref(module->widget); g_free(libname); res = g_list_insert_sorted(res, module, dt_imageio_sort_modules_format); } g_dir_close(dir); iio->plugins_format = res; return 0; }
static int dt_imageio_load_modules_format(dt_imageio_t *iio) { iio->plugins_format = NULL; GList *res = NULL; dt_imageio_module_format_t *module; char plugindir[1024], plugin_name[256]; const gchar *d_name; dt_loc_get_plugindir(plugindir, 1024); g_strlcat(plugindir, "/plugins/imageio/format", 1024); GDir *dir = g_dir_open(plugindir, 0, NULL); if(!dir) return 1; while((d_name = g_dir_read_name(dir))) { // get lib*.so if(strncmp(d_name, "lib", 3)) continue; if(strncmp(d_name + strlen(d_name) - 3, ".so", 3)) continue; strncpy(plugin_name, d_name+3, strlen(d_name)-6); plugin_name[strlen(d_name)-6] = '\0'; module = (dt_imageio_module_format_t *)malloc(sizeof(dt_imageio_module_format_t)); gchar *libname = g_module_build_path(plugindir, (const gchar *)plugin_name); if(dt_imageio_load_module_format(module, libname, plugin_name)) { free(module); continue; } module->gui_data = NULL; module->gui_init(module); if(module->widget) gtk_widget_ref(module->widget); g_free(libname); res = g_list_insert_sorted(res, module, dt_imageio_sort_modules_format); } g_dir_close(dir); iio->plugins_format = res; return 0; }