summaryrefslogtreecommitdiff
path: root/components/dfs/src
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-01-01 13:46:15 +0000
committer[email protected] <[email protected]>2012-01-01 13:46:15 +0000
commitfcf74ed108d7d999db080500c843f5bdc0b04755 (patch)
tree36960ed85a2c666ed53b721115f3f6bfa53f083c /components/dfs/src
parentbeaf51ff8226f6f2f6d7a598cae7dd929d4afcaa (diff)
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
Diffstat (limited to 'components/dfs/src')
-rw-r--r--components/dfs/src/dfs_file.c35
1 files 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);