diff options
Diffstat (limited to 'opengl/shared/OpenglOsUtils/osDynLibrary.cpp')
-rw-r--r-- | opengl/shared/OpenglOsUtils/osDynLibrary.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/opengl/shared/OpenglOsUtils/osDynLibrary.cpp b/opengl/shared/OpenglOsUtils/osDynLibrary.cpp new file mode 100644 index 0000000..e8e6ab7 --- /dev/null +++ b/opengl/shared/OpenglOsUtils/osDynLibrary.cpp @@ -0,0 +1,79 @@ +/* +* Copyright (C) 2011 The Android Open Source Project +* +* 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 "osDynLibrary.h" + +#ifndef _WIN32 +#include <dlfcn.h> +#endif +#include <stdio.h> + +namespace osUtils { + +dynLibrary *dynLibrary::open(const char *p_libName) +{ + dynLibrary *lib = new dynLibrary(); + if (!lib) { + return NULL; + } + +#ifdef _WIN32 + lib->m_lib = LoadLibrary(p_libName); +#else // !WIN32 + lib->m_lib = dlopen(p_libName, RTLD_NOW); +#endif + + if (lib->m_lib == NULL) { + printf("Failed to load %s\n", p_libName); +#ifndef _WIN32 + printf("error %s\n", dlerror()); //only on linux +#endif + delete lib; + return NULL; + } + + return lib; +} + +dynLibrary::dynLibrary() : + m_lib(NULL) +{ +} + +dynLibrary::~dynLibrary() +{ + if (NULL != m_lib) { +#ifdef _WIN32 + FreeLibrary(m_lib); +#else // !WIN32 + dlclose(m_lib); +#endif + } +} + +dynFuncPtr dynLibrary::findSymbol(const char *p_symName) +{ + if (NULL == m_lib) { + return NULL; + } + +#ifdef _WIN32 + return (dynFuncPtr) GetProcAddress(m_lib, p_symName); +#else // !WIN32 + return (dynFuncPtr) dlsym(m_lib, p_symName); +#endif +} + +} // of namespace osUtils |