Merge the patch to fix fd issue; lwIP protect issue
This commit is contained in:
parent
8e439999e8
commit
1f16147f69
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue