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