Browse Source

[libc] Add dl features in KConfig.

Bernard Xiong 7 năm trước cách đây
mục cha
commit
cdd12b7930
3 tập tin đã thay đổi với 44 bổ sung38 xóa
  1. 6 0
      components/libc/Kconfig
  2. 1 0
      components/libc/libdl/dlfcn.h
  3. 37 38
      components/libc/libdl/dlopen.c

+ 6 - 0
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

+ 1 - 0
components/libc/libdl/dlfcn.h

@@ -16,3 +16,4 @@ void *dlsym(void *handle, const char *symbol);
 int dlclose (void *handle);
 
 #endif
+

+ 37 - 38
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 <rtthread.h>
 #include <rtm.h>
 #include <string.h>
 
-#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);