Pārlūkot izejas kodu

fix compiling warning; optimize ls function.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1186 bbd45198-f89e-11dd-88c7-29a3b14d5316
bernard.xiong 14 gadi atpakaļ
vecāks
revīzija
83bb6a11bb
2 mainītis faili ar 35 papildinājumiem un 14 dzēšanām
  1. 9 1
      components/dfs/src/dfs.c
  2. 26 13
      components/dfs/src/dfs_file.c

+ 9 - 1
components/dfs/src/dfs.c

@@ -74,7 +74,10 @@ void dfs_lock()
 	rt_err_t result;
 
 	result = rt_mutex_take(&fslock, RT_WAITING_FOREVER);
-	RT_ASSERT(result == RT_EOK);
+	if (result != RT_EOK)
+	{
+		RT_ASSERT(0);
+	}
 }
 
 /**
@@ -350,6 +353,11 @@ up_one:
 	}
 
 	*dst = '\0';
+
+	/* remove '/' in the end of path if exist */
+	dst --;
+	if ((dst != fullpath) && (*dst == '/')) *dst = '\0';
+
 	return fullpath;
 }
 /*@}*/

+ 26 - 13
components/dfs/src/dfs_file.c

@@ -444,14 +444,28 @@ void ls(const char* pathname)
 {
 	struct stat stat;
 	int length;
-	char* fullpath;
+	char *fullpath, *path;
+
+	fullpath = RT_NULL;
+	if (pathname == RT_NULL)
+	{
+#ifdef DFS_USING_WORKDIR
+		/* open current working directory */
+		path = rt_strdup(working_directory);
+#else
+		path = rt_strdup("/");
+#endif
+		if (path == RT_NULL) return ; /* out of memory */
+	}
+	else
+	{
+		path = (char*)pathname;
+	}
 
-	fullpath = rt_malloc(DFS_PATH_MAX + 1);
-	if (fullpath == RT_NULL) return; /* out of memory */
 	/* list directory */
-	if ( dfs_file_open(&fd, pathname, DFS_O_DIRECTORY) == 0 )
+	if ( dfs_file_open(&fd, path, DFS_O_DIRECTORY) == 0 )
 	{
-		rt_kprintf("Directory %s:\n", pathname);
+		rt_kprintf("Directory %s:\n", path);
 		do
 		{
 			rt_memset(&dirent, 0, sizeof(struct dirent));
@@ -461,25 +475,24 @@ void ls(const char* pathname)
 				rt_memset(&stat, 0, sizeof(struct stat));
 
 				/* build full path for each file */
-				if (pathname[strlen(pathname) - 1] != '/')
-					rt_snprintf(fullpath, DFS_PATH_MAX + 1, "%s%c%s", pathname, '/', dirent.d_name);
-				else
-					rt_snprintf(fullpath, DFS_PATH_MAX + 1, "%s%s", pathname, dirent.d_name);
+				fullpath = dfs_normalize_path(path, dirent.d_name);
+				if (fullpath == RT_NULL) break;
 
 				if (dfs_file_stat(fullpath, &stat) == 0)
 				{
+					rt_kprintf("%-20s", dirent.d_name);
 					if ( DFS_S_ISDIR(stat.st_mode))
 					{
-						rt_kprintf("%s\t\t<DIR>\n", dirent.d_name);
+						rt_kprintf("%-25s\n", "<DIR>");
 					}
 					else
 					{
-						rt_kprintf("%s\t\t%lu\n", dirent.d_name, stat.st_size);
+						rt_kprintf("%-25lu\n", stat.st_size);
 					}
 				}
 				else
 					rt_kprintf("BAD file: %s\n", dirent.d_name);
-					
+				rt_free(fullpath);
 			}
 		}while(length > 0);
 
@@ -489,7 +502,7 @@ void ls(const char* pathname)
 	{
 		rt_kprintf("No such directory\n");
 	}
-	rt_free(fullpath);
+	if (pathname == RT_NULL) rt_free(path);
 }
 FINSH_FUNCTION_EXPORT(ls, list directory contents)