summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheyuanjie <heyuanjie>2018-08-12 20:26:16 +0800
committerheyuanjie <heyuanjie>2018-08-12 20:26:16 +0800
commitfd209cb880f6d2d39b6265c09727182b55446bdf (patch)
tree90f55537819432f1e16e912a6bf2f8c7735e7736
parent68edd04cbbd996cb80d935f40e4f90d3742bfbc6 (diff)
[lwp]添加select系统调用
-rw-r--r--components/dfs/src/select.c19
-rw-r--r--components/lwp/lwp_syscall.c6
2 files changed, 21 insertions, 4 deletions
diff --git a/components/dfs/src/select.c b/components/dfs/src/select.c
index c727763991..8b4e417f28 100644
--- a/components/dfs/src/select.c
+++ b/components/dfs/src/select.c
@@ -28,6 +28,19 @@
#include <dfs_poll.h>
#include <dfs_select.h>
+static void fdzero(fd_set *set, int nfds)
+{
+ fd_mask *m;
+ int n;
+
+ m = (fd_mask*)set;
+ for (n = 0; n < nfds; n += sizeof(fd_mask))
+ {
+ rt_memset(m, 0, sizeof(fd_mask));
+ m ++;
+ }
+}
+
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
{
int fd;
@@ -113,17 +126,17 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struc
/* Now set up the return values */
if (readfds)
{
- memset(readfds, 0, sizeof(fd_set));
+ fdzero(readfds, nfds);
}
if (writefds)
{
- memset(writefds, 0, sizeof(fd_set));
+ fdzero(writefds, nfds);
}
if (exceptfds)
{
- memset(exceptfds, 0, sizeof(fd_set));
+ fdzero(exceptfds, nfds);
}
/* Convert the poll descriptor list back into selects 3 bitsets */
diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c
index 1b5aa411aa..0150e50b62 100644
--- a/components/lwp/lwp_syscall.c
+++ b/components/lwp/lwp_syscall.c
@@ -27,6 +27,8 @@
#include <lwp_syscall.h>
#include <dfs_poll.h>
+#include <dfs_select.h>
+
#if (defined(RT_USING_SAL) && defined(SAL_USING_POSIX))
#include <sys/socket.h>
@@ -235,7 +237,7 @@ const static void* func_table[] =
(void *)sys_gettimeofday, // 0x0b
(void *)sys_settimeofday, // 0x0c
-
+
(void *)sys_malloc, // 0x0d
(void *)sys_free, // 0x0e
(void *)sys_realloc, //0x0f
@@ -256,6 +258,8 @@ const static void* func_table[] =
SYSCALL_NET(send), // 0x1d
SYSCALL_NET(sendto), // 0x1e
SYSCALL_NET(socket), // 0x1f
+
+ select, // 0x20
};
const void *lwp_get_sys_api(rt_uint32_t number)