1441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker/* 2441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * Copyright (C) 2013 The Android Open Source Project 3441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * 4441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * Licensed under the Apache License, Version 2.0 (the "License"); 5441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * you may not use this file except in compliance with the License. 6441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * You may obtain a copy of the License at 7441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * 8441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * http://www.apache.org/licenses/LICENSE-2.0 9441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * 10441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * Unless required by applicable law or agreed to in writing, software 11441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * distributed under the License is distributed on an "AS IS" BASIS, 12441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * See the License for the specific language governing permissions and 14441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker * limitations under the License. 15441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker */ 16441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 17441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker//#define LOG_NDEBUG 0 18441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#define LOG_TAG "Drm" 19441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include <utils/Log.h> 20441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include <media/stagefright/foundation/ADebug.h> 21441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 22441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include <dlfcn.h> 23441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 24441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker#include "SharedLibrary.h" 25441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 26441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinkernamespace android { 27441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 28441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker SharedLibrary::SharedLibrary(const String8 &path) { 29441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker mLibHandle = dlopen(path.string(), RTLD_NOW); 30441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker } 31441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 32441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker SharedLibrary::~SharedLibrary() { 33441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker if (mLibHandle != NULL) { 34441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker dlclose(mLibHandle); 35441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker mLibHandle = NULL; 36441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker } 37441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker } 38441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 39441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker bool SharedLibrary::operator!() const { 40441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker return mLibHandle == NULL; 41441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker } 42441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker 43441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker void *SharedLibrary::lookup(const char *symbol) const { 44441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker if (!mLibHandle) { 45441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker return NULL; 46441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker } 47441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker return dlsym(mLibHandle, symbol); 48441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker } 49d1eff5718510228503958e8fafa698c9e6a4a230leozwang@google.com 50d1eff5718510228503958e8fafa698c9e6a4a230leozwang@google.com const char *SharedLibrary::lastError() const { 51d1eff5718510228503958e8fafa698c9e6a4a230leozwang@google.com const char *error = dlerror(); 52d1eff5718510228503958e8fafa698c9e6a4a230leozwang@google.com return error ? error : "No errors or unknown error"; 53d1eff5718510228503958e8fafa698c9e6a4a230leozwang@google.com } 54d1eff5718510228503958e8fafa698c9e6a4a230leozwang@google.com 55441a78d5e224e0d67f9b52fa9adc795c6944159bJeff Tinker}; 56