From fd209cb880f6d2d39b6265c09727182b55446bdf Mon Sep 17 00:00:00 2001 From: heyuanjie Date: Sun, 12 Aug 2018 20:26:16 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[lwp]=E6=B7=BB=E5=8A=A0select=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/dfs/src/select.c | 19 ++++++++++++++++--- components/lwp/lwp_syscall.c | 6 +++++- 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 #include +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 #include +#include + #if (defined(RT_USING_SAL) && defined(SAL_USING_POSIX)) #include @@ -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) From d948dba42a7b2a219508ac28cf78e6e44f835dcf Mon Sep 17 00:00:00 2001 From: heyuanjie87 Date: Sun, 12 Aug 2018 20:41:56 +0800 Subject: [PATCH 2/4] update select.c --- components/dfs/src/select.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/dfs/src/select.c b/components/dfs/src/select.c index 8b4e417f28..3c83ac109c 100644 --- a/components/dfs/src/select.c +++ b/components/dfs/src/select.c @@ -34,7 +34,7 @@ static void fdzero(fd_set *set, int nfds) int n; m = (fd_mask*)set; - for (n = 0; n < nfds; n += sizeof(fd_mask)) + for (n = 0; n < nfds; n += (sizeof(fd_mask) * 8)) { rt_memset(m, 0, sizeof(fd_mask)); m ++; From c90b449dac29e3e5a46a20988b043d283d3405d6 Mon Sep 17 00:00:00 2001 From: heyuanjie87 Date: Mon, 13 Aug 2018 22:42:09 +0800 Subject: [PATCH 3/4] Update select.c --- components/dfs/src/select.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/dfs/src/select.c b/components/dfs/src/select.c index 3c83ac109c..339d506c7f 100644 --- a/components/dfs/src/select.c +++ b/components/dfs/src/select.c @@ -32,7 +32,11 @@ static void fdzero(fd_set *set, int nfds) { fd_mask *m; int n; - + + /* + The 'sizeof(fd_set)' of the system space may differ from user space, + so the actual size of the 'fd_set' is determined here with the parameter 'nfds' + */ m = (fd_mask*)set; for (n = 0; n < nfds; n += (sizeof(fd_mask) * 8)) { From 18510fa80fef9751228935ef31e0b9fab9e3cdcc Mon Sep 17 00:00:00 2001 From: heyuanjie87 Date: Tue, 14 Aug 2018 09:33:22 +0800 Subject: [PATCH 4/4] Update select.c --- components/dfs/src/select.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/dfs/src/select.c b/components/dfs/src/select.c index 339d506c7f..cbbd159557 100644 --- a/components/dfs/src/select.c +++ b/components/dfs/src/select.c @@ -28,7 +28,7 @@ #include #include -static void fdzero(fd_set *set, int nfds) +static void fdszero(fd_set *set, int nfds) { fd_mask *m; int n; @@ -130,17 +130,17 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struc /* Now set up the return values */ if (readfds) { - fdzero(readfds, nfds); + fdszero(readfds, nfds); } if (writefds) { - fdzero(writefds, nfds); + fdszero(writefds, nfds); } if (exceptfds) { - fdzero(exceptfds, nfds); + fdszero(exceptfds, nfds); } /* Convert the poll descriptor list back into selects 3 bitsets */