/* Copyright (C) 2011 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
*/
#ifndef ANDROID_UTILS_DLL_H
#define ANDROID_UTILS_DLL_H

#include "android/utils/compiler.h"

ANDROID_BEGIN_HEADER

/* Opaque type to model a dynamic library handle */
typedef struct ADynamicLibrary   ADynamicLibrary;

/* Try to load/open a dynamic library named 'libraryName', looking for
 * it in the optional paths listed by 'libraryPaths'.
 *
 * Once opened, you can use adynamicLibrary_findSymbol() and
 * adynamicLibrary_close() on it.
 *
 * libraryName :: library name, if no extension is provided, then '.so'
 *                will be appended on Unix systems, or '.dll' on Windows.
 *
 * pError :: On success, '*pError' will be set to NULL. On error, it will
 *           point to a string describing the error, which must be freed by
 *           the caller.
 *
 * returns an ADynamicLibrary pointer.
 */
ADynamicLibrary*   adynamicLibrary_open( const char*  libraryName,
                                         char**       pError);

/* Find a symbol inside a dynamic library. */
void* adynamicLibrary_findSymbol( ADynamicLibrary*  lib,
                                  const char*       symbolName,
                                  char**            pError);

/* Close/unload a given dynamic library */
void  adynamicLibrary_close( ADynamicLibrary*  lib );

ANDROID_END_HEADER

#endif /* ANDROID_UTILS_DLL_H */
