fix romfs lookup and open directory issue.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1662 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong 2011-08-04 09:04:39 +00:00
parent 1992d17501
commit 9781537575
1 changed files with 14 additions and 3 deletions

View File

@ -81,6 +81,8 @@ struct romfs_dirent* dfs_romfs_lookup(struct romfs_dirent* root_dirent, const ch
else
{
/* return file dirent */
if (subpath != RT_NULL) break; /* not the end of path */
return &dirent[index];
}
}
@ -146,9 +148,18 @@ int dfs_romfs_open(struct dfs_fd* file)
dirent = dfs_romfs_lookup(root_dirent, file->path, &size);
if (dirent == RT_NULL) return -DFS_STATUS_ENOENT;
/* is a directory but not with O_DIRECTORY flag */
if ((dirent->type == ROMFS_DIRENT_DIR) && !(file->flags & DFS_O_DIRECTORY))
return -DFS_STATUS_ENOENT;
/* entry is a directory file type */
if (dirent->type == ROMFS_DIRENT_DIR)
{
if (!(file->flags & DFS_O_DIRECTORY) )
return -DFS_STATUS_ENOENT;
}
else
{
/* entry is a file, but open it as a directory */
if (file->flags & DFS_O_DIRECTORY)
return -DFS_STATUS_ENOENT;
}
file->data = dirent;
file->size = size;