From 83bb6a11bb16bd785bd1aecbd93f11be231a3f39 Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Thu, 9 Dec 2010 07:54:00 +0000 Subject: [PATCH] fix compiling warning; optimize ls function. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1186 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/dfs/src/dfs.c | 10 ++++++++- components/dfs/src/dfs_file.c | 39 +++++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/components/dfs/src/dfs.c b/components/dfs/src/dfs.c index facad6db6..5888b8ad0 100644 --- a/components/dfs/src/dfs.c +++ b/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; } /*@}*/ diff --git a/components/dfs/src/dfs_file.c b/components/dfs/src/dfs_file.c index 4deba547b..e9b33f2ea 100644 --- a/components/dfs/src/dfs_file.c +++ b/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\n", dirent.d_name); + rt_kprintf("%-25s\n", ""); } 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) -- GitLab