s200661524 发表于 2013-2-7 18:42:46

发现rt-thread的dfs子系统代码中的一点"bug"

本帖最后由 s200661524 于 2013-2-7 18:44 编辑

研究rt的虚拟文件系统比较长时间,感觉精悍小巧而功能强大。在dfs系统中dfs_file.c文件
函数int dfs_file_rename(const char *oldpath, const char *newpath)
........
........
oldfullpath = dfs_normalize_path(RT_NULL, oldpath);
    if (oldfullpath == RT_NULL)
    {
      result = -DFS_STATUS_ENOENT;
      goto __exit;
    }
    newfullpath = dfs_normalize_path(RT_NULL, newpath);
    if (newfullpath == RT_NULL)
    {
      result = -DFS_STATUS_ENOENT;
      goto __exit;
    }
.......
.......
__exit:
    rt_free(oldfullpath);
    rt_free(newfullpath);
    /* not at same file system, return EXDEV */
    return result;
...................................................................................................
dfs_normalize_path返回空的时,在rt_free里面会产生警告。
不知道这是不是一个小bug?个人感觉如果改成以下会好点
........
........
oldfullpath = dfs_normalize_path(RT_NULL, oldpath);
    if (oldfullpath == RT_NULL)
    {
      result = -DFS_STATUS_ENOENT;
      goto __exit2;
    }
    newfullpath = dfs_normalize_path(RT_NULL, newpath);
    if (newfullpath == RT_NULL)
    {
      result = -DFS_STATUS_ENOENT;
      goto __exit1;
    }
.......
.......

    rt_free(newfullpath);
__exit1:
    rt_free(oldfullpath);
__exit2:   
/* not at same file system, return EXDEV */
    return result;

不知道分析得对不对。
页: [1]
查看完整版本: 发现rt-thread的dfs子系统代码中的一点"bug"