浏览代码

Merge the patch to fix fd issue; lwIP protect issue

Bernard Xiong 10 年之前
父节点
当前提交
1f16147f69

+ 5 - 5
components/dfs/src/dfs_file.c

@@ -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;
@@ -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;

+ 4 - 0
components/dfs/src/dfs_posix.c

@@ -230,6 +230,7 @@ off_t lseek(int fd, off_t offset, int whence)
         break;
         break;
 
 
     default:
     default:
+        fd_put(d);
         rt_set_errno(-DFS_STATUS_EINVAL);
         rt_set_errno(-DFS_STATUS_EINVAL);
 
 
         return -1;
         return -1;
@@ -237,6 +238,7 @@ off_t lseek(int fd, off_t offset, int whence)
 
 
     if (offset < 0)
     if (offset < 0)
     {
     {
+        fd_put(d);
         rt_set_errno(-DFS_STATUS_EINVAL);
         rt_set_errno(-DFS_STATUS_EINVAL);
 
 
         return -1;
         return -1;
@@ -427,6 +429,7 @@ int mkdir(const char *path, mode_t mode)
 
 
     if (result < 0)
     if (result < 0)
     {
     {
+        fd_put(d);
         fd_put(d);
         fd_put(d);
         rt_set_errno(result);
         rt_set_errno(result);
 
 
@@ -435,6 +438,7 @@ int mkdir(const char *path, mode_t mode)
 
 
     dfs_file_close(d);
     dfs_file_close(d);
     fd_put(d);
     fd_put(d);
+    fd_put(d);
 
 
     return 0;
     return 0;
 }
 }

+ 4 - 0
components/net/lwip-1.4.1/src/arch/include/arch/cc.h

@@ -103,5 +103,9 @@ void sys_arch_assert(const char* file, int line);
 
 
 #include "string.h"
 #include "string.h"
 
 
+#define SYS_ARCH_DECL_PROTECT(level)	
+#define SYS_ARCH_PROTECT(level)		rt_enter_critical()
+#define SYS_ARCH_UNPROTECT(level) 	rt_exit_critical()
+
 #endif /* __ARCH_CC_H__ */
 #endif /* __ARCH_CC_H__ */
 
 

+ 1 - 1
include/rtdef.h

@@ -1,7 +1,7 @@
 /*
 /*
  * File      : rtdef.h
  * File      : rtdef.h
  * This file is part of RT-Thread RTOS
  * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
+ * COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
  *
  *
  *  This program is free software; you can redistribute it and/or modify
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  it under the terms of the GNU General Public License as published by

+ 1 - 1
src/kservice.c

@@ -1072,8 +1072,8 @@ rt_device_t rt_console_set_device(const char *name)
         }
         }
 
 
         /* set new console device */
         /* set new console device */
+        rt_device_open(new, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM);
         _console_device = new;
         _console_device = new;
-        rt_device_open(_console_device, RT_DEVICE_OFLAG_RDWR);
     }
     }
 
 
     return old;
     return old;