EAPI Eina_Module * eina_module_find(const Eina_Array *array, const char *module) { unsigned int i; Eina_Array_Iterator iterator; Eina_Module *m; EINA_ARRAY_ITER_NEXT(array, i, m, iterator) { char *file_m; char *tmp; ssize_t len; /* basename() can modify its argument, so we first get a copie */ /* do not use strdupa, as opensolaris does not have it */ len = strlen(eina_module_file_get(m)); tmp = alloca(len + 1); memcpy(tmp, eina_module_file_get(m), len + 1); file_m = basename(tmp); len = strlen(file_m); len -= sizeof(SHARED_LIB_SUFFIX) - 1; if (len <= 0) continue; if (!strncmp(module, file_m, len)) return m;; }
Eina_Bool _elm_web_init(const char *engine) { char buf[PATH_MAX]; if (!bs_mod_get(buf, sizeof(buf), "elementary/web", engine)) snprintf(buf, sizeof(buf), "%s/elementary/modules/web/%s/%s/module"EFL_SHARED_EXTENSION, _elm_lib_dir, engine, MODULE_ARCH); if (ewm.m) { // Check if the module is already open if (!strcmp(buf, eina_module_file_get(ewm.m))) return EINA_TRUE; // We are leaking reference on purpose here, as we can't be sure that // the web engine is not leaking state around preventing a clean exit. // Only future elm_web object created from now will use the new engine. ewm.unneed_web = NULL; ewm.need_web = NULL; ewm.window_features_ref = NULL; ewm.window_features_unref = NULL; ewm.window_features_property_get = NULL; ewm.window_features_region_get = NULL; ewm.class_get = NULL; } ewm.m = eina_module_new(buf); if (!ewm.m) return EINA_FALSE; if (!eina_module_load(ewm.m)) { eina_module_free(ewm.m); ewm.m = NULL; return EINA_FALSE; } ewm.unneed_web = eina_module_symbol_get(ewm.m, "ewm_unneed_web"); ewm.need_web = eina_module_symbol_get(ewm.m, "ewm_need_web"); ewm.window_features_ref = eina_module_symbol_get(ewm.m, "ewm_window_features_ref"); ewm.window_features_unref = eina_module_symbol_get(ewm.m, "ewm_window_features_unref"); ewm.window_features_property_get = eina_module_symbol_get(ewm.m, "ewm_window_features_property_get"); ewm.window_features_region_get = eina_module_symbol_get(ewm.m, "ewm_window_features_region_get"); ewm.class_get = eina_module_symbol_get(ewm.m, "ewm_class_get"); // Only the class_get is mandatory if (!ewm.class_get) return EINA_FALSE; return EINA_TRUE; }
/** * @brief Init the module system */ int enna_module_init(void) { Eina_Array_Iterator iterator; unsigned int i; #ifdef USE_STATIC_MODULES Enna_Module_Api *api; /* Populate the array of available plugins statically */ _plugins_array = eina_array_new(20); #ifdef BUILD_ACTIVITY_BOOKSTORE eina_array_push(_plugins_array, &enna_mod_activity_bookstore_api); #endif #ifdef BUILD_ACTIVITY_CONFIGURATION eina_array_push(_plugins_array, &enna_mod_activity_configuration_api); #endif #ifdef BUILD_ACTIVITY_GAMES eina_array_push(_plugins_array, &enna_mod_activity_games_api); #endif #ifdef BUILD_ACTIVITY_MUSIC eina_array_push(_plugins_array, &enna_mod_activity_music_api); #endif #ifdef BUILD_ACTIVITY_PHOTO eina_array_push(_plugins_array, &enna_mod_activity_photo_api); #endif #ifdef BUILD_ACTIVITY_TV eina_array_push(_plugins_array, &enna_mod_activity_tv_api); #endif #ifdef BUILD_ACTIVITY_VIDEO eina_array_push(_plugins_array, &enna_mod_activity_video_api); #endif #ifdef BUILD_ACTIVITY_WEATHER eina_array_push(_plugins_array, &enna_mod_activity_weather_api); #endif #ifdef BUILD_BROWSER_CDDA eina_array_push(_plugins_array, &enna_mod_browser_cdda_api); #endif #ifdef BUILD_BROWSER_DVD eina_array_push(_plugins_array, &enna_mod_browser_dvd_api); #endif #ifdef BUILD_BROWSER_IPOD eina_array_push(_plugins_array, &enna_mod_browser_ipod_api); #endif #ifdef BUILD_BROWSER_SPOTIFY eina_array_push(_plugins_array, &enna_mod_browser_spotify_api); #endif #ifdef BUILD_BROWSER_LOCALFILES eina_array_push(_plugins_array, &enna_mod_browser_localfiles_api); #endif #ifdef BUILD_BROWSER_NETSTREAMS eina_array_push(_plugins_array, &enna_mod_browser_netstreams_api); #endif #ifdef BUILD_BROWSER_PODCASTS eina_array_push(_plugins_array, &enna_mod_browser_podcasts_api); #endif #ifdef BUILD_BROWSER_SHOUTCAST eina_array_push(_plugins_array, &enna_mod_browser_shoutcast_api); #endif #ifdef BUILD_BROWSER_UPNP eina_array_push(_plugins_array, &enna_mod_browser_upnp_api); #endif #ifdef BUILD_BROWSER_VALHALLA eina_array_push(_plugins_array, &enna_mod_browser_valhalla_api); #endif #ifdef BUILD_GADGET_DATE eina_array_push(_plugins_array, &enna_mod_gadget_date_api); #endif #ifdef BUILD_GADGET_DUMMY eina_array_push(_plugins_array, &enna_mod_gadget_dummy_api); #endif #ifdef BUILD_GADGET_WEATHER eina_array_push(_plugins_array, &enna_mod_gadget_weather_api); #endif #ifdef BUILD_INPUT_KBD eina_array_push(_plugins_array, &enna_mod_input_kbd_api); #endif #ifdef BUILD_INPUT_LIRC eina_array_push(_plugins_array, &enna_mod_input_lirc_api); #endif #ifdef BUILD_INPUT_WIIMOTE eina_array_push(_plugins_array, &enna_mod_input_wiimote_api); #endif #ifdef BUILD_VOLUME_HAL eina_array_push(_plugins_array, &enna_mod_volume_hal_api); #endif #ifdef BUILD_VOLUME_MTAB eina_array_push(_plugins_array, &enna_mod_volume_mtab_api); #endif #ifdef BUILD_VOLUME_UDEV eina_array_push(_plugins_array, &enna_mod_volume_udev_api); #endif /* Log the array */ enna_log(ENNA_MSG_INFO, NULL, "Available Plugins (static):"); EINA_ARRAY_ITER_NEXT(_plugins_array, i, api, iterator) enna_log(ENNA_MSG_INFO, NULL, "\t * %s", api->name); #else Eina_Module *module; /* Populate the array of available plugins dinamically */ _plugins_array = eina_array_new(20); _plugins_array = eina_module_list_get(_plugins_array, PACKAGE_LIB_DIR"/enna/modules/", 0, NULL, NULL); enna_log(ENNA_MSG_INFO, NULL, "Plugin Directory: %s", PACKAGE_LIB_DIR"/enna/modules/"); /* Log the array */ enna_log(ENNA_MSG_INFO, NULL, "Available Plugins (dynamic):"); EINA_ARRAY_ITER_NEXT(_plugins_array, i, module, iterator) enna_log(ENNA_MSG_INFO, NULL, "\t * %s", eina_module_file_get(module)); #endif /* USE_STATIC_MODULES */ #if ENABLE_CONFIG_PANEL _config_panel = enna_config_panel_register(_("Modules"), "icon/module", _config_panel_show, _config_panel_hide, NULL); #endif return 0; }
} Emous_Data; const char* BYTE_ENDINGS[] = {"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", NULL}; static int mount_ref = 0; static int lib_ref = 0; int _emous_domain; static Eina_Array *modules = NULL; static Eina_Bool _module_load_cb(Eina_Module *m, void *data EINA_UNUSED) { // we take everything! DBG("Loading module %s", eina_module_file_get(m)); return EINA_TRUE; } EOLIAN static int _emous_init_lib(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) { lib_ref ++; if (lib_ref > 1) return lib_ref; if (!eina_init()) { printf("Eina init failed!\n"); goto eina_err;
static const int THUMB_SIZE_NORMAL = 128; static const int THUMB_SIZE_LARGE = 256; static Eina_Hash *_plugins_ext = NULL; static Eina_Array *_plugins = NULL; static Eina_Bool _ethumb_plugin_list_cb(Eina_Module *m, void *data __UNUSED__) { const char *file; const char **ext; Ethumb_Plugin *plugin; Ethumb_Plugin *(*plugin_get)(void); file = eina_module_file_get(m); if (!eina_module_load(m)) { ERR("could not load module \"%s\": %s", file, eina_error_msg_get(eina_error_get())); return EINA_FALSE; } plugin_get = eina_module_symbol_get(m, "ethumb_plugin_get"); if (!plugin_get) { ERR("could not find ethumb_plugin_get() in module \"%s\": %s", file, eina_error_msg_get(eina_error_get())); eina_module_unload(m); return EINA_FALSE; }