1b85b2756d1e247f8314bb591700fb175d7346631keunyoung/* 2b85b2756d1e247f8314bb591700fb175d7346631keunyoung* Copyright 2011 The Android Open Source Project 3b85b2756d1e247f8314bb591700fb175d7346631keunyoung* 4b85b2756d1e247f8314bb591700fb175d7346631keunyoung* Licensed under the Apache License, Version 2.0 (the "License"); 5b85b2756d1e247f8314bb591700fb175d7346631keunyoung* you may not use this file except in compliance with the License. 6b85b2756d1e247f8314bb591700fb175d7346631keunyoung* You may obtain a copy of the License at 7b85b2756d1e247f8314bb591700fb175d7346631keunyoung* 8b85b2756d1e247f8314bb591700fb175d7346631keunyoung* http://www.apache.org/licenses/LICENSE-2.0 9b85b2756d1e247f8314bb591700fb175d7346631keunyoung* 10b85b2756d1e247f8314bb591700fb175d7346631keunyoung* Unless required by applicable law or agreed to in writing, software 11b85b2756d1e247f8314bb591700fb175d7346631keunyoung* distributed under the License is distributed on an "AS IS" BASIS, 12b85b2756d1e247f8314bb591700fb175d7346631keunyoung* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b85b2756d1e247f8314bb591700fb175d7346631keunyoung* See the License for the specific language governing permissions and 14b85b2756d1e247f8314bb591700fb175d7346631keunyoung* limitations under the License. 15b85b2756d1e247f8314bb591700fb175d7346631keunyoung*/ 16b85b2756d1e247f8314bb591700fb175d7346631keunyoung 17b85b2756d1e247f8314bb591700fb175d7346631keunyoung#ifndef _API_INITIALIZER_H_ 18b85b2756d1e247f8314bb591700fb175d7346631keunyoung#define _API_INITIALIZER_H_ 19b85b2756d1e247f8314bb591700fb175d7346631keunyoung#include <stdlib.h> 20b85b2756d1e247f8314bb591700fb175d7346631keunyoung#include <dlfcn.h> 21b85b2756d1e247f8314bb591700fb175d7346631keunyoung 22b85b2756d1e247f8314bb591700fb175d7346631keunyoungclass ApiInitializer { 23b85b2756d1e247f8314bb591700fb175d7346631keunyoungpublic: 24b85b2756d1e247f8314bb591700fb175d7346631keunyoung ApiInitializer(void *dso) : 25b85b2756d1e247f8314bb591700fb175d7346631keunyoung m_dso(dso) { 26b85b2756d1e247f8314bb591700fb175d7346631keunyoung } 27b85b2756d1e247f8314bb591700fb175d7346631keunyoung static void *s_getProc(const char *name, void *userData) { 28b85b2756d1e247f8314bb591700fb175d7346631keunyoung ApiInitializer *self = (ApiInitializer *)userData; 29b85b2756d1e247f8314bb591700fb175d7346631keunyoung return self->getProc(name); 30b85b2756d1e247f8314bb591700fb175d7346631keunyoung } 31b85b2756d1e247f8314bb591700fb175d7346631keunyoungprivate: 32b85b2756d1e247f8314bb591700fb175d7346631keunyoung void *m_dso; 33b85b2756d1e247f8314bb591700fb175d7346631keunyoung void *getProc(const char *name) { 34b85b2756d1e247f8314bb591700fb175d7346631keunyoung void *symbol = NULL; 35b85b2756d1e247f8314bb591700fb175d7346631keunyoung if (m_dso) { 36b85b2756d1e247f8314bb591700fb175d7346631keunyoung symbol = dlsym(m_dso, name); 37b85b2756d1e247f8314bb591700fb175d7346631keunyoung } 38b85b2756d1e247f8314bb591700fb175d7346631keunyoung return symbol; 39b85b2756d1e247f8314bb591700fb175d7346631keunyoung } 40b85b2756d1e247f8314bb591700fb175d7346631keunyoung}; 41b85b2756d1e247f8314bb591700fb175d7346631keunyoung 42b85b2756d1e247f8314bb591700fb175d7346631keunyoung#endif 43