summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2015-10-09 09:34:32 +0800
committerBernard Xiong <[email protected]>2015-10-09 09:34:32 +0800
commit1f16147f6931d4f635e51dd91b80f111cce11087 (patch)
treee5ab928d90326dac25da157eca84bb021b12c802
parent8e439999e8ccaf93df7361f6e3c0ec8c7363bdd7 (diff)
Merge the patch to fix fd issue; lwIP protect issue
-rw-r--r--components/dfs/src/dfs_file.c10
-rw-r--r--components/dfs/src/dfs_posix.c4
-rw-r--r--components/net/lwip-1.4.1/src/arch/include/arch/cc.h4
-rw-r--r--include/rtdef.h2
-rw-r--r--src/kservice.c2
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 <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;
@@ -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;
@@ -428,6 +430,7 @@ int mkdir(const char *path, mode_t mode)
if (result < 0)
{
fd_put(d);
+ fd_put(d);
rt_set_errno(result);
return -1;
@@ -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;