/* * UI Gadget * * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Jayoun Lee * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include #include #include #include #include #include #include #include #include "ug-engine.h" #include "ug-dbg.h" #define UG_ENGINE_INIT_SYM "UG_ENGINE_INIT" #define UG_ENGINE_EXIT_SYM "UG_ENGINE_EXIT" enum ug_engine_type { UG_ENGINE_EFL = 0x00, }; struct ug_engine *ug_engine_load() { void *handle; struct ug_engine *engine; int (*engine_init)(struct ug_engine_ops *ops); engine = calloc(1, sizeof(struct ug_engine)); if (!engine) { errno = ENOMEM; return NULL; } handle = dlopen("libui-gadget-1-efl-engine.so", RTLD_LAZY); if (!handle) { _ERR("dlopen failed: %s", dlerror()); goto engine_free; } engine_init = dlsym(handle, UG_ENGINE_INIT_SYM); if (!engine_init) { _ERR("dlsym failed: %s", dlerror()); goto engine_dlclose; } if (engine_init(&engine->ops)) goto engine_dlclose; engine->handle = handle; return engine; engine_dlclose: dlclose(handle); engine_free: free(engine); return NULL; } /* LCOV_EXCL_START */ int ug_engine_unload(struct ug_engine *engine) { void (*engine_exit)(struct ug_engine_ops *ops); if (!engine) { errno = EINVAL; return -1; } if (engine->handle) { engine_exit = dlsym(engine->handle, UG_ENGINE_EXIT_SYM); if (engine_exit) engine_exit(&engine->ops); else _ERR("dlsym failed: %s", dlerror()); dlclose(engine->handle); } free(engine); engine = NULL; return 0; } /* LCOV_EXCL_STOP */