diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 852bb5cfc9cb2931ddc0d4dd12e2513e894dd36e..0b1db61c30161d0c52f372188f70f891893e7278 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 069f0d9c46a179afe272e009f5933412d5418f5c..304ba5a777387d10fa887fb02a858a1d9fa25e7b 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 2c091079b2e2294bc9068d36ca93e3036a4c7392..6c89cb03c0742a0015b06fc0bcf8142e58fe8dc5 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; - - /* 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); - - /* 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); - - if(fullpath != filename) - { - rt_free(fullpath); - } - - return (void*)module; + rt_module_t module; + char *fullpath; + const char*def_path = MODULE_ROOT_DIR; + + /* 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); + + /* 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); + + if(fullpath != filename) + { + rt_free(fullpath); + } + + return (void*)module; } - -RTM_EXPORT(dlopen) +RTM_EXPORT(dlopen);