diff options
| author | [email protected] <[email protected]> | 2012-01-01 13:46:15 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2012-01-01 13:46:15 +0000 |
| commit | fcf74ed108d7d999db080500c843f5bdc0b04755 (patch) | |
| tree | 36960ed85a2c666ed53b721115f3f6bfa53f083c /components | |
| parent | beaf51ff8226f6f2f6d7a598cae7dd929d4afcaa (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')
| -rw-r--r-- | components/dfs/src/dfs_file.c | 35 |
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); |
