Merge "util to get get symbol from a library"
This commit is contained in:
commit
de7fa11dd6
4 changed files with 61 additions and 1 deletions
|
@ -9,6 +9,7 @@ include $(CLEAR_VARS)
|
|||
|
||||
## Libs
|
||||
LOCAL_SHARED_LIBRARIES := \
|
||||
libdl \
|
||||
libutils \
|
||||
libcutils \
|
||||
liblog \
|
||||
|
|
|
@ -61,7 +61,7 @@ libgps_utils_la_LDFLAGS = -Wl,-z,defs -lpthread -shared -version-info 1:0:0
|
|||
libgps_utils_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
|
||||
endif
|
||||
|
||||
libgps_utils_la_LIBADD = $(CUTILS_LIBS)
|
||||
libgps_utils_la_LIBADD = $(CUTILS_LIBS) -ldl
|
||||
|
||||
#Create and Install libraries
|
||||
lib_LTLIBRARIES = libgps_utils.la
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#define LOG_TAG "LocSvc_misc_utils"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <dlfcn.h>
|
||||
#include <log_util.h>
|
||||
#include <loc_misc_utils.h>
|
||||
#include <ctype.h>
|
||||
|
@ -112,3 +113,33 @@ void loc_util_trim_space(char *org_string)
|
|||
err:
|
||||
return;
|
||||
}
|
||||
|
||||
inline void logDlError(const char* failedCall) {
|
||||
const char * err = dlerror();
|
||||
LOC_LOGe("%s error: %s", failedCall, (nullptr == err) ? "unknown" : err);
|
||||
}
|
||||
|
||||
void* dlGetSymFromLib(void*& libHandle, const char* libName, const char* symName)
|
||||
{
|
||||
void* sym = nullptr;
|
||||
if ((nullptr != libHandle || nullptr != libName) && nullptr != symName) {
|
||||
if (nullptr == libHandle) {
|
||||
libHandle = dlopen(libName, RTLD_NOW);
|
||||
if (nullptr == libHandle) {
|
||||
logDlError("dlopen");
|
||||
}
|
||||
}
|
||||
// NOT else, as libHandle gets assigned 5 line above
|
||||
if (nullptr != libHandle) {
|
||||
sym = dlsym(libHandle, symName);
|
||||
if (nullptr == sym) {
|
||||
logDlError("dlsym");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LOC_LOGe("Either libHandle (%p) or libName (%p) must not be null; "
|
||||
"symName (%p) can not be null.", libHandle, libName, symName);
|
||||
}
|
||||
|
||||
return sym;
|
||||
}
|
||||
|
|
|
@ -92,6 +92,34 @@ SIDE EFFECTS
|
|||
N/A
|
||||
===========================================================================*/
|
||||
void loc_util_trim_space(char *org_string);
|
||||
|
||||
/*===========================================================================
|
||||
FUNCTION dlGetSymFromLib
|
||||
|
||||
DESCRIPTION
|
||||
Handy function to get a pointer to a symbol from a library.
|
||||
|
||||
If libHandle is not null, it will be used as the handle to the library. In
|
||||
that case libName wll not be used;
|
||||
libHandle is an in / out parameter.
|
||||
If libHandle is null, libName will be used to dlopen.
|
||||
Either libHandle or libName must not be nullptr.
|
||||
symName must not be null.
|
||||
|
||||
DEPENDENCIES
|
||||
N/A
|
||||
|
||||
RETURN VALUE
|
||||
pointer to symName. Could be nullptr if
|
||||
Parameters are incorrect; or
|
||||
libName can not be opened; or
|
||||
symName can not be found.
|
||||
|
||||
SIDE EFFECTS
|
||||
N/A
|
||||
===========================================================================*/
|
||||
void* dlGetSymFromLib(void*& libHandle, const char* libName, const char* symName);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue