1816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner/* Copyright (C) 2011 The Android Open Source Project 2816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** 3816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** This software is licensed under the terms of the GNU General Public 4816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** License version 2, as published by the Free Software Foundation, and 5816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** may be copied, distributed, and modified under those terms. 6816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** 7816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** This program is distributed in the hope that it will be useful, 8816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** but WITHOUT ANY WARRANTY; without even the implied warranty of 9816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner** GNU General Public License for more details. 11816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner*/ 12816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner#ifndef ANDROID_UTILS_DLL_H 13816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner#define ANDROID_UTILS_DLL_H 14816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner 15f0c747e01328e713891f2fa66c4f9df64f580dc2David 'Digit' Turner#include "android/utils/compiler.h" 16f0c747e01328e713891f2fa66c4f9df64f580dc2David 'Digit' Turner 17f0c747e01328e713891f2fa66c4f9df64f580dc2David 'Digit' TurnerANDROID_BEGIN_HEADER 18f0c747e01328e713891f2fa66c4f9df64f580dc2David 'Digit' Turner 19816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner/* Opaque type to model a dynamic library handle */ 20816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turnertypedef struct ADynamicLibrary ADynamicLibrary; 21816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner 22816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner/* Try to load/open a dynamic library named 'libraryName', looking for 23816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * it in the optional paths listed by 'libraryPaths'. 24816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * 25816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * Once opened, you can use adynamicLibrary_findSymbol() and 26816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * adynamicLibrary_close() on it. 27816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * 28816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * libraryName :: library name, if no extension is provided, then '.so' 29816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * will be appended on Unix systems, or '.dll' on Windows. 30816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * 31816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * pError :: On success, '*pError' will be set to NULL. On error, it will 32816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * point to a string describing the error, which must be freed by 33816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * the caller. 34816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * 35816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner * returns an ADynamicLibrary pointer. 36816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner */ 37816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' TurnerADynamicLibrary* adynamicLibrary_open( const char* libraryName, 38816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner char** pError); 39816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner 40816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner/* Find a symbol inside a dynamic library. */ 41816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turnervoid* adynamicLibrary_findSymbol( ADynamicLibrary* lib, 42816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner const char* symbolName, 43816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner char** pError); 44816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner 45816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner/* Close/unload a given dynamic library */ 46816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turnervoid adynamicLibrary_close( ADynamicLibrary* lib ); 47816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner 48f0c747e01328e713891f2fa66c4f9df64f580dc2David 'Digit' TurnerANDROID_END_HEADER 49f0c747e01328e713891f2fa66c4f9df64f580dc2David 'Digit' Turner 50816e53ca385b64c18c9c7cfca569c4d747634e97David 'Digit' Turner#endif /* ANDROID_UTILS_DLL_H */ 51