static bool ply_renderer_load_plugin (ply_renderer_t *renderer, const char *module_path) { assert (renderer != NULL); get_backend_interface_function_t get_renderer_backend_interface; renderer->module_handle = ply_open_module (module_path); if (renderer->module_handle == NULL) return false; get_renderer_backend_interface = (get_backend_interface_function_t) ply_module_look_up_function (renderer->module_handle, "ply_renderer_backend_get_interface"); if (get_renderer_backend_interface == NULL) { ply_save_errno (); ply_trace ("module '%s' is not a renderer plugin", module_path); ply_close_module (renderer->module_handle); renderer->module_handle = NULL; ply_restore_errno (); return false; } renderer->plugin_interface = get_renderer_backend_interface (); if (renderer->plugin_interface == NULL) { ply_trace ("module '%s' is not a valid renderer plugin", module_path); ply_save_errno (); ply_close_module (renderer->module_handle); renderer->module_handle = NULL; ply_restore_errno (); return false; } renderer->backend = renderer->plugin_interface->create_backend (renderer->device_name, renderer->terminal); if (renderer->backend == NULL) { ply_save_errno (); ply_trace ("module '%s' renderer backend could not be created", module_path); ply_close_module (renderer->module_handle); renderer->module_handle = NULL; ply_restore_errno (); return false; } return true; }
static bool ply_label_load_plugin (ply_label_t *label) { assert (label != NULL); get_plugin_interface_function_t get_label_plugin_interface; label->module_handle = ply_open_module (PLYMOUTH_PLUGIN_PATH "label.so"); if (label->module_handle == NULL) return false; get_label_plugin_interface = (get_plugin_interface_function_t) ply_module_look_up_function (label->module_handle, "ply_label_plugin_get_interface"); if (get_label_plugin_interface == NULL) { ply_save_errno (); ply_close_module (label->module_handle); label->module_handle = NULL; ply_restore_errno (); return false; } label->plugin_interface = get_label_plugin_interface (); if (label->plugin_interface == NULL) { ply_save_errno (); ply_close_module (label->module_handle); label->module_handle = NULL; ply_restore_errno (); return false; } label->control = label->plugin_interface->create_control (); if (label->text != NULL) label->plugin_interface->set_text_for_control (label->control, label->text); label->plugin_interface->set_alignment_for_control (label->control, label->alignment); label->plugin_interface->set_width_for_control (label->control, label->width); if (label->fontdesc != NULL) label->plugin_interface->set_font_for_control (label->control, label->fontdesc); label->plugin_interface->set_color_for_control (label->control, label->red, label->green, label->blue, label->alpha); return true; }