/* * 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