static void gplp_load_base (GOPluginLoader *loader, GOErrorInfo **ret_error) { char *argv[] = { (char*)"", NULL, NULL, NULL }; char const *arg; int argc; arg = go_plugin_get_dir_name (go_plugin_loader_get_plugin (loader)); argv[1] = g_strconcat ("-I", arg, NULL); argv[2] = g_build_filename (arg, "perl_func.pl", NULL); argc = 2; if (g_file_test (argv[2], G_FILE_TEST_EXISTS)) { PERL_SYS_INIT3 (&argc, (char ***)&argv, NULL); gnm_perl_interp = perl_alloc (); perl_construct (gnm_perl_interp); perl_parse (gnm_perl_interp, xs_init, 3, argv, NULL); my_perl = gnm_perl_interp; init_help_consts (); #ifdef PERL_EXIT_DESTRUCT_END PL_exit_flags |= PERL_EXIT_DESTRUCT_END; #endif } else { *ret_error = go_error_info_new_printf ( _("perl_func.pl doesn't exist.")); } g_free (argv[1]); g_free (argv[2]); }
static void go_plugin_service_resource_read_xml (GOPluginService *service, xmlNode *tree, GOErrorInfo **ret_error) { GOPluginServiceResource *sr = GO_PLUGIN_SERVICE_RESOURCE (service); char *data = NULL; gsize length; xmlChar *file; GO_INIT_RET_ERROR_INFO (ret_error); sr->id = xml2c (go_xml_node_get_cstr (tree, "id")); if (!sr->id) goto error; file = go_xml_node_get_cstr (tree, "file"); if (file) { char *absfile; gboolean ok; if (!g_path_is_absolute (CXML2C (file))) { char const *dir = go_plugin_get_dir_name (go_plugin_service_get_plugin (service)); absfile = g_build_filename (dir, CXML2C (file), NULL); } else absfile = g_strdup (CXML2C (file)); xmlFree (file); ok = g_file_get_contents (absfile, &data, &length, NULL); g_free (absfile); if (!ok) goto error; } else { data = xml2c (go_xml_node_get_cstr (tree, "data")); length = strlen (data); } if (!data) goto error; /* No encoding case */ sr->value = g_string_sized_new (length); g_string_append_len (sr->value, data, length); g_free (data); return; error: *ret_error = go_error_info_new_str (_("Invalid resource service")); g_free (data); }
static void gplp_load_base (GOPluginLoader *loader, GOErrorInfo **ret_error) { static gchar const *python_file_extensions[] = {"py", "pyc", "pyo", NULL}; GnmPythonPluginLoader *loader_python = GNM_PYTHON_PLUGIN_LOADER (loader); gchar const **file_ext; GnmPython *py_object; GnmPyInterpreter *py_interpreter_info; gchar *full_module_file_name = NULL; FILE *f; GOPlugin *plugin = go_plugin_loader_get_plugin (loader); GOErrorInfo *open_error = NULL; PyObject *modules, *main_module, *main_module_dict; GO_INIT_RET_ERROR_INFO (ret_error); g_object_set_data (G_OBJECT (plugin), "python-loader", loader); py_object = gnm_python_object_get (ret_error); if (py_object == NULL) return; /* gnm_python_object_get sets ret_error */ py_interpreter_info = gnm_python_new_interpreter (py_object, plugin); if (py_interpreter_info == NULL) { *ret_error = go_error_info_new_str (_("Cannot create new Python interpreter.")); gnm_python_clear_error_if_needed (py_object); g_object_unref (py_object); return; } for (file_ext = python_file_extensions; *file_ext != NULL; file_ext++) { gchar *file_name = g_strconcat ( loader_python->module_name, ".", *file_ext, NULL); gchar *path = g_build_filename ( go_plugin_get_dir_name (plugin), file_name, NULL); g_free (file_name); if (g_file_test (path, G_FILE_TEST_EXISTS)) { full_module_file_name = path; break; } else g_free (path); } if (full_module_file_name == NULL) { *ret_error = go_error_info_new_printf ( _("Module \"%s\" doesn't exist."), loader_python->module_name); gnm_python_destroy_interpreter (py_object, py_interpreter_info); g_object_unref (py_object); return; } f = gnumeric_fopen_error_info (full_module_file_name, "r", &open_error); g_free (full_module_file_name); if (f == NULL) { *ret_error = open_error; gnm_python_destroy_interpreter (py_object, py_interpreter_info); g_object_unref (py_object); return; } if (PyRun_SimpleFile (f, loader_python->module_name) != 0) { (void) fclose (f); *ret_error = go_error_info_new_printf ( _("Execution of module \"%s\" failed."), loader_python->module_name); gnm_python_destroy_interpreter (py_object, py_interpreter_info); g_object_unref (py_object); return; } (void) fclose (f); modules = PyImport_GetModuleDict (); g_return_if_fail (modules != NULL); main_module = PyDict_GetItemString (modules, (char *) "__main__"); g_return_if_fail (main_module != NULL); main_module_dict = PyModule_GetDict (main_module); g_return_if_fail (main_module_dict != NULL); loader_python->py_object = py_object; loader_python->py_interpreter_info = py_interpreter_info; loader_python->main_module = main_module; loader_python->main_module_dict = main_module_dict; }
static void cb_pm_selection_changed (GtkTreeSelection *selection, PluginManagerGUI *pm_gui) { GOPlugin *pinfo; GtkTreeIter iter; const char *plugin_desc; g_return_if_fail (pm_gui != NULL); g_signal_handlers_disconnect_matched ( pm_gui->checkbutton_mark_for_deactivation, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, cb_checkbutton_mark_for_deactivation_toggled, NULL); if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) { gtk_text_buffer_set_text (pm_gui->text_description, "", 0); gtk_entry_set_text (pm_gui->entry_directory, ""); gtk_tree_store_clear (pm_gui->model_details); gtk_widget_hide (pm_gui->frame_mark_for_deactivation); } else { GtkTreeIter iter2, iter3; GSList *dep_ids, *services; gtk_tree_model_get (GTK_TREE_MODEL (pm_gui->model_plugins), &iter, PLUGIN_POINTER, &pinfo, -1); plugin_desc = _(go_plugin_get_description (pinfo)); if (plugin_desc == NULL) { plugin_desc = ""; } gtk_text_buffer_set_text ( pm_gui->text_description, plugin_desc, strlen (plugin_desc)); gtk_entry_set_text (pm_gui->entry_directory, go_plugin_get_dir_name (pinfo)); gtk_tree_store_clear (pm_gui->model_details); gtk_tree_store_append (pm_gui->model_details, &iter, NULL); gtk_tree_store_set ( pm_gui->model_details, &iter, DETAILS_DESC, go_plugin_get_name (pinfo), DETAILS_ID, go_plugin_get_id (pinfo), -1); dep_ids = go_plugin_get_dependencies_ids (pinfo); if (dep_ids != NULL) { gtk_tree_store_append (pm_gui->model_details, &iter2, &iter); gtk_tree_store_set ( pm_gui->model_details, &iter2, DETAILS_DESC, _("Plugin dependencies"), DETAILS_ID, "", -1); GO_SLIST_FOREACH (dep_ids, char, dep_id, GOPlugin *dep_plugin; const char *name; dep_plugin = go_plugins_get_plugin_by_id (dep_id); name = dep_plugin != NULL ? (char *) go_plugin_get_name (dep_plugin) : _("Unknown plugin"); gtk_tree_store_append (pm_gui->model_details, &iter3, &iter2); gtk_tree_store_set ( pm_gui->model_details, &iter3, DETAILS_DESC, name, DETAILS_ID, dep_id, -1); ); }