[DFS] Fix the fd clear issue.
This commit is contained in:
parent
951fd5429c
commit
c6d4407c57
|
@ -21,6 +21,7 @@
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2005-02-22 Bernard The first version.
|
* 2005-02-22 Bernard The first version.
|
||||||
* 2011-12-08 Bernard Merges rename patch from iamcacy.
|
* 2011-12-08 Bernard Merges rename patch from iamcacy.
|
||||||
|
* 2015-05-27 Bernard Fix the fd clear issue.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dfs.h>
|
#include <dfs.h>
|
||||||
|
@ -97,7 +98,7 @@ int dfs_file_open(struct dfs_fd *fd, const char *path, int flags)
|
||||||
{
|
{
|
||||||
/* clear fd */
|
/* clear fd */
|
||||||
rt_free(fd->path);
|
rt_free(fd->path);
|
||||||
rt_memset(fd, 0, sizeof(*fd));
|
fd->path = RT_NULL;
|
||||||
|
|
||||||
return -DFS_STATUS_ENOSYS;
|
return -DFS_STATUS_ENOSYS;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +107,7 @@ int dfs_file_open(struct dfs_fd *fd, const char *path, int flags)
|
||||||
{
|
{
|
||||||
/* clear fd */
|
/* clear fd */
|
||||||
rt_free(fd->path);
|
rt_free(fd->path);
|
||||||
rt_memset(fd, 0, sizeof(*fd));
|
fd->path = RT_NULL;
|
||||||
|
|
||||||
dfs_log(DFS_DEBUG_INFO, ("open failed"));
|
dfs_log(DFS_DEBUG_INFO, ("open failed"));
|
||||||
|
|
||||||
|
@ -143,7 +144,7 @@ int dfs_file_close(struct dfs_fd *fd)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
rt_free(fd->path);
|
rt_free(fd->path);
|
||||||
rt_memset(fd, 0, sizeof(struct dfs_fd));
|
fd->path = RT_NULL;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -165,7 +166,7 @@ int dfs_file_ioctl(struct dfs_fd *fd, int cmd, void *args)
|
||||||
return -DFS_STATUS_EINVAL;
|
return -DFS_STATUS_EINVAL;
|
||||||
|
|
||||||
fs = fd->fs;
|
fs = fd->fs;
|
||||||
if (fs->ops->ioctl != RT_NULL)
|
if (fs->ops->ioctl != RT_NULL)
|
||||||
return fs->ops->ioctl(fd, cmd, args);
|
return fs->ops->ioctl(fd, cmd, args);
|
||||||
|
|
||||||
return -DFS_STATUS_ENOSYS;
|
return -DFS_STATUS_ENOSYS;
|
||||||
|
@ -186,11 +187,11 @@ int dfs_file_read(struct dfs_fd *fd, void *buf, rt_size_t len)
|
||||||
struct dfs_filesystem *fs;
|
struct dfs_filesystem *fs;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
if (fd == RT_NULL)
|
if (fd == RT_NULL)
|
||||||
return -DFS_STATUS_EINVAL;
|
return -DFS_STATUS_EINVAL;
|
||||||
|
|
||||||
fs = (struct dfs_filesystem *)fd->fs;
|
fs = (struct dfs_filesystem *)fd->fs;
|
||||||
if (fs->ops->read == RT_NULL)
|
if (fs->ops->read == RT_NULL)
|
||||||
return -DFS_STATUS_ENOSYS;
|
return -DFS_STATUS_ENOSYS;
|
||||||
|
|
||||||
if ((result = fs->ops->read(fd, buf, len)) < 0)
|
if ((result = fs->ops->read(fd, buf, len)) < 0)
|
||||||
|
@ -213,7 +214,7 @@ int dfs_file_getdents(struct dfs_fd *fd, struct dirent *dirp, rt_size_t nbytes)
|
||||||
struct dfs_filesystem *fs;
|
struct dfs_filesystem *fs;
|
||||||
|
|
||||||
/* parameter check */
|
/* parameter check */
|
||||||
if (fd == RT_NULL || fd->type != FT_DIRECTORY)
|
if (fd == RT_NULL || fd->type != FT_DIRECTORY)
|
||||||
return -DFS_STATUS_EINVAL;
|
return -DFS_STATUS_EINVAL;
|
||||||
|
|
||||||
fs = (struct dfs_filesystem *)fd->fs;
|
fs = (struct dfs_filesystem *)fd->fs;
|
||||||
|
@ -267,7 +268,7 @@ int dfs_file_unlink(const char *path)
|
||||||
result = fs->ops->unlink(fs, dfs_subdir(fs->path, fullpath));
|
result = fs->ops->unlink(fs, dfs_subdir(fs->path, fullpath));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
result = fs->ops->unlink(fs, fullpath);
|
result = fs->ops->unlink(fs, fullpath);
|
||||||
}
|
}
|
||||||
else result = -DFS_STATUS_ENOSYS;
|
else result = -DFS_STATUS_ENOSYS;
|
||||||
|
|
||||||
|
@ -528,7 +529,7 @@ void ls(const char *pathname)
|
||||||
|
|
||||||
/* build full path for each file */
|
/* build full path for each file */
|
||||||
fullpath = dfs_normalize_path(path, dirent.d_name);
|
fullpath = dfs_normalize_path(path, dirent.d_name);
|
||||||
if (fullpath == RT_NULL)
|
if (fullpath == RT_NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (dfs_file_stat(fullpath, &stat) == 0)
|
if (dfs_file_stat(fullpath, &stat) == 0)
|
||||||
|
@ -555,7 +556,7 @@ void ls(const char *pathname)
|
||||||
{
|
{
|
||||||
rt_kprintf("No such directory\n");
|
rt_kprintf("No such directory\n");
|
||||||
}
|
}
|
||||||
if (pathname == RT_NULL)
|
if (pathname == RT_NULL)
|
||||||
rt_free(path);
|
rt_free(path);
|
||||||
}
|
}
|
||||||
FINSH_FUNCTION_EXPORT(ls, list directory contents);
|
FINSH_FUNCTION_EXPORT(ls, list directory contents);
|
||||||
|
@ -632,15 +633,15 @@ static void copyfile(const char *src, const char *dst)
|
||||||
read_bytes = dfs_file_read(&src_fd, block_ptr, BUF_SZ);
|
read_bytes = dfs_file_read(&src_fd, block_ptr, BUF_SZ);
|
||||||
if (read_bytes > 0)
|
if (read_bytes > 0)
|
||||||
{
|
{
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
length = dfs_file_write(&fd, block_ptr, read_bytes);
|
length = dfs_file_write(&fd, block_ptr, read_bytes);
|
||||||
if (length != read_bytes)
|
if (length != read_bytes)
|
||||||
{
|
{
|
||||||
/* write failed. */
|
/* write failed. */
|
||||||
rt_kprintf("Write file data failed, errno=%d\n", length);
|
rt_kprintf("Write file data failed, errno=%d\n", length);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (read_bytes > 0);
|
} while (read_bytes > 0);
|
||||||
|
|
||||||
|
@ -652,7 +653,6 @@ static void copyfile(const char *src, const char *dst)
|
||||||
extern int mkdir(const char *path, mode_t mode);
|
extern int mkdir(const char *path, mode_t mode);
|
||||||
static void copydir(const char * src, const char * dst)
|
static void copydir(const char * src, const char * dst)
|
||||||
{
|
{
|
||||||
struct dfs_fd fd;
|
|
||||||
struct dirent dirent;
|
struct dirent dirent;
|
||||||
struct stat stat;
|
struct stat stat;
|
||||||
int length;
|
int length;
|
||||||
|
|
Loading…
Reference in New Issue