diff --git a/components/dfs/src/dfs_file.c b/components/dfs/src/dfs_file.c index 614a34949466f08ebd8789c2c50a6467f8b29423..aebe2996c684efad0106ee52aa21638c36a1059e 100644 --- a/components/dfs/src/dfs_file.c +++ b/components/dfs/src/dfs_file.c @@ -21,6 +21,7 @@ * Date Author Notes * 2005-02-22 Bernard The first version. * 2011-12-08 Bernard Merges rename patch from iamcacy. + * 2015-05-27 Bernard Fix the fd clear issue. */ #include @@ -97,7 +98,7 @@ int dfs_file_open(struct dfs_fd *fd, const char *path, int flags) { /* clear fd */ rt_free(fd->path); - rt_memset(fd, 0, sizeof(*fd)); + fd->path = RT_NULL; return -DFS_STATUS_ENOSYS; } @@ -106,7 +107,7 @@ int dfs_file_open(struct dfs_fd *fd, const char *path, int flags) { /* clear fd */ rt_free(fd->path); - rt_memset(fd, 0, sizeof(*fd)); + fd->path = RT_NULL; dfs_log(DFS_DEBUG_INFO, ("open failed")); @@ -143,7 +144,7 @@ int dfs_file_close(struct dfs_fd *fd) return result; rt_free(fd->path); - rt_memset(fd, 0, sizeof(struct dfs_fd)); + fd->path = RT_NULL; return result; } @@ -165,7 +166,7 @@ int dfs_file_ioctl(struct dfs_fd *fd, int cmd, void *args) return -DFS_STATUS_EINVAL; fs = fd->fs; - if (fs->ops->ioctl != RT_NULL) + if (fs->ops->ioctl != RT_NULL) return fs->ops->ioctl(fd, cmd, args); 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; int result = 0; - if (fd == RT_NULL) + if (fd == RT_NULL) return -DFS_STATUS_EINVAL; fs = (struct dfs_filesystem *)fd->fs; - if (fs->ops->read == RT_NULL) + if (fs->ops->read == RT_NULL) return -DFS_STATUS_ENOSYS; 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; /* parameter check */ - if (fd == RT_NULL || fd->type != FT_DIRECTORY) + if (fd == RT_NULL || fd->type != FT_DIRECTORY) return -DFS_STATUS_EINVAL; 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)); } else - result = fs->ops->unlink(fs, fullpath); + result = fs->ops->unlink(fs, fullpath); } else result = -DFS_STATUS_ENOSYS; @@ -528,7 +529,7 @@ void ls(const char *pathname) /* build full path for each file */ fullpath = dfs_normalize_path(path, dirent.d_name); - if (fullpath == RT_NULL) + if (fullpath == RT_NULL) break; if (dfs_file_stat(fullpath, &stat) == 0) @@ -555,7 +556,7 @@ void ls(const char *pathname) { rt_kprintf("No such directory\n"); } - if (pathname == RT_NULL) + if (pathname == RT_NULL) rt_free(path); } 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); if (read_bytes > 0) { - int length; - + int length; + length = dfs_file_write(&fd, block_ptr, read_bytes); - if (length != read_bytes) - { - /* write failed. */ - rt_kprintf("Write file data failed, errno=%d\n", length); - break; - } + if (length != read_bytes) + { + /* write failed. */ + rt_kprintf("Write file data failed, errno=%d\n", length); + break; + } } } 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); static void copydir(const char * src, const char * dst) { - struct dfs_fd fd; struct dirent dirent; struct stat stat; int length;