From fcf74ed108d7d999db080500c843f5bdc0b04755 Mon Sep 17 00:00:00 2001 From: "bernard.xiong@gmail.com" Date: Sun, 1 Jan 2012 13:46:15 +0000 Subject: [PATCH] add DFS_FS_FLAG_FULLPATH support in rename function. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1905 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/dfs/src/dfs_file.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/components/dfs/src/dfs_file.c b/components/dfs/src/dfs_file.c index b9f050b602..3c9897fc77 100644 --- a/components/dfs/src/dfs_file.c +++ b/components/dfs/src/dfs_file.c @@ -420,6 +420,7 @@ int dfs_file_rename(const char *oldpath, const char *newpath) result = DFS_STATUS_OK; newfullpath = RT_NULL; + oldfullpath = RT_NULL; oldfullpath = dfs_normalize_path(RT_NULL, oldpath); if (oldfullpath == RT_NULL) @@ -435,33 +436,29 @@ int dfs_file_rename(const char *oldpath, const char *newpath) goto __exit; } - if ((oldfs = dfs_filesystem_lookup(oldfullpath)) == RT_NULL) - { - result = -DFS_STATUS_ENOENT; - goto __exit; - } - - if ((newfs = dfs_filesystem_lookup(newfullpath)) == RT_NULL) - { - result = -DFS_STATUS_ENOENT; - goto __exit; - } + oldfs = dfs_filesystem_lookup(oldfullpath); + newfs = dfs_filesystem_lookup(newfullpath); if (oldfs == newfs) { if (oldfs->ops->rename == RT_NULL) { result = -DFS_STATUS_ENOSYS; - goto __exit; } - - /* use sub directory to rename in file system */ - result = oldfs->ops->rename(oldfs, dfs_subdir(oldfs->path, oldfullpath), - dfs_subdir(newfs->path, newfullpath)); - goto __exit; + else + { + if (oldfs->ops->flags & DFS_FS_FLAG_FULLPATH) + result = oldfs->ops->rename(oldfs, oldfullpath, newfullpath); + else + /* use sub directory to rename in file system */ + result = oldfs->ops->rename(oldfs, dfs_subdir(oldfs->path, oldfullpath), + dfs_subdir(newfs->path, newfullpath)); + } + } + else + { + result = -DFS_STATUS_EXDEV; } - - result = -DFS_STATUS_EXDEV; __exit: rt_free(oldfullpath);