From cdd12b7930edd446dc79fef66dd50271f9bd55e1 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Wed, 25 Apr 2018 23:26:20 +0800 Subject: [PATCH] [libc] Add dl features in KConfig. --- components/libc/Kconfig | 6 ++++ components/libc/libdl/dlfcn.h | 1 + components/libc/libdl/dlopen.c | 63 +++++++++++++++++----------------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 852bb5cfc9..0b1db61c30 100644 --- a/components/libc/Kconfig +++ b/components/libc/Kconfig @@ -27,6 +27,12 @@ if RT_USING_LIBC && RT_USING_DFS bool "Enable AIO" default n endif + + if RT_USING_MODULE + config RT_USING_LIBDL + bool "Enable dlopen/dlsym/dlclose feature" + default n + endif endif config HAVE_SYS_SIGNALS diff --git a/components/libc/libdl/dlfcn.h b/components/libc/libdl/dlfcn.h index 069f0d9c46..304ba5a777 100644 --- a/components/libc/libdl/dlfcn.h +++ b/components/libc/libdl/dlfcn.h @@ -16,3 +16,4 @@ void *dlsym(void *handle, const char *symbol); int dlclose (void *handle); #endif + diff --git a/components/libc/libdl/dlopen.c b/components/libc/libdl/dlopen.c index 2c091079b2..6c89cb03c0 100644 --- a/components/libc/libdl/dlopen.c +++ b/components/libc/libdl/dlopen.c @@ -8,51 +8,50 @@ * http://www.rt-thread.org/license/LICENSE * * Change Logs: - * Date Author Notes - * 2010-11-17 yi.qiu first version + * Date Author Notes + * 2010-11-17 yi.qiu first version */ - + #include #include #include -#define MODULE_ROOT_DIR "/module/lib" +#define MODULE_ROOT_DIR "/modules" void* dlopen(const char *filename, int flags) { - rt_module_t module; - char *fullpath; - const char*def_path = MODULE_ROOT_DIR; + rt_module_t module; + char *fullpath; + const char*def_path = MODULE_ROOT_DIR; - /* check parameters */ - RT_ASSERT(filename != RT_NULL); + /* check parameters */ + RT_ASSERT(filename != RT_NULL); - if (filename[0] != '/') /* it's a relative path, prefix with MODULE_ROOT_DIR */ - { - fullpath = rt_malloc(strlen(def_path) + strlen(filename) + 2); + if (filename[0] != '/') /* it's a relative path, prefix with MODULE_ROOT_DIR */ + { + fullpath = rt_malloc(strlen(def_path) + strlen(filename) + 2); - /* join path and file name */ - rt_snprintf(fullpath, strlen(def_path) + strlen(filename) + 2, - "%s/%s", def_path, filename); - } - else - { - fullpath = (char*)filename; /* absolute path, use it directly */ - } + /* join path and file name */ + rt_snprintf(fullpath, strlen(def_path) + strlen(filename) + 2, + "%s/%s", def_path, filename); + } + else + { + fullpath = (char*)filename; /* absolute path, use it directly */ + } - /* find in module list */ - module = rt_module_find(fullpath); - - if(module != RT_NULL) module->nref++; - else module = rt_module_open(fullpath); + /* find in module list */ + module = rt_module_find(fullpath); - if(fullpath != filename) - { - rt_free(fullpath); - } + if(module != RT_NULL) module->nref++; + else module = rt_module_open(fullpath); - return (void*)module; + if(fullpath != filename) + { + rt_free(fullpath); + } + + return (void*)module; } - -RTM_EXPORT(dlopen) +RTM_EXPORT(dlopen);