From 32d13198df15cfed5164ed510073b4f9a1a6181e Mon Sep 17 00:00:00 2001 From: qiuyiuestc Date: Mon, 20 Dec 2010 15:42:54 +0000 Subject: [PATCH] update dlopen implement git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1219 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/libdl/dlopen.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/components/libdl/dlopen.c b/components/libdl/dlopen.c index 00405523e4..f31623083f 100644 --- a/components/libdl/dlopen.c +++ b/components/libdl/dlopen.c @@ -15,24 +15,34 @@ #include #include +#define MODULE_ROOT_DIR "/module" + 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 absolute path, use it directly */ + { + 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); + } + /* find in module list */ - module = rt_module_find(filename); + module = rt_module_find(fullpath); - if(module) - { - module->nref++; - return (void*)module; - } - else - { - module = rt_module_open(filename); - } + if(module != RT_NULL) module->nref++; + else module = rt_module_open(fullpath); + + rt_free(fullpath); + return (void*)module; } RTM_EXPORT(dlopen) -- GitLab