From 1f16147f6931d4f635e51dd91b80f111cce11087 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Fri, 9 Oct 2015 09:34:32 +0800 Subject: [PATCH] Merge the patch to fix fd issue; lwIP protect issue --- components/dfs/src/dfs_file.c | 10 +++++----- components/dfs/src/dfs_posix.c | 4 ++++ components/net/lwip-1.4.1/src/arch/include/arch/cc.h | 4 ++++ include/rtdef.h | 2 +- src/kservice.c | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/components/dfs/src/dfs_file.c b/components/dfs/src/dfs_file.c index 614a349494..43b291a6c8 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; @@ -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; diff --git a/components/dfs/src/dfs_posix.c b/components/dfs/src/dfs_posix.c index c1a6a5beb6..b1f693f7c9 100644 --- a/components/dfs/src/dfs_posix.c +++ b/components/dfs/src/dfs_posix.c @@ -230,6 +230,7 @@ off_t lseek(int fd, off_t offset, int whence) break; default: + fd_put(d); rt_set_errno(-DFS_STATUS_EINVAL); return -1; @@ -237,6 +238,7 @@ off_t lseek(int fd, off_t offset, int whence) if (offset < 0) { + fd_put(d); rt_set_errno(-DFS_STATUS_EINVAL); return -1; @@ -427,6 +429,7 @@ int mkdir(const char *path, mode_t mode) if (result < 0) { + fd_put(d); fd_put(d); rt_set_errno(result); @@ -435,6 +438,7 @@ int mkdir(const char *path, mode_t mode) dfs_file_close(d); fd_put(d); + fd_put(d); return 0; } diff --git a/components/net/lwip-1.4.1/src/arch/include/arch/cc.h b/components/net/lwip-1.4.1/src/arch/include/arch/cc.h index 0633494d1a..88786c280c 100644 --- a/components/net/lwip-1.4.1/src/arch/include/arch/cc.h +++ b/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" +#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__ */ diff --git a/include/rtdef.h b/include/rtdef.h index b0d1a33a32..ae8c738256 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -1,7 +1,7 @@ /* * File : rtdef.h * 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 * it under the terms of the GNU General Public License as published by diff --git a/src/kservice.c b/src/kservice.c index 0f06806087..5d4496431f 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -1072,8 +1072,8 @@ rt_device_t rt_console_set_device(const char *name) } /* set new console device */ + rt_device_open(new, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM); _console_device = new; - rt_device_open(_console_device, RT_DEVICE_OFLAG_RDWR); } return old;