浏览代码

[DFS] Fix the fd clear issue.

Bernard Xiong 10 年之前
父节点
当前提交
c6d4407c57
共有 1 个文件被更改,包括 19 次插入19 次删除
  1. 19 19
      components/dfs/src/dfs_file.c

+ 19 - 19
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 <dfs.h>
@@ -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;