diff --git a/components/dfs/filesystems/lwip/lwip_select.c b/components/dfs/filesystems/lwip/lwip_select.c index 4d74406ade7b7b6ad049e67aa0755fd8ccd9deb3..7e97d37416e533f730afd77e8b689e6112ea561e 100644 --- a/components/dfs/filesystems/lwip/lwip_select.c +++ b/components/dfs/filesystems/lwip/lwip_select.c @@ -1,3 +1,27 @@ +/* + * File : lwip_select.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2015-05-05 Bernard First version + */ + #include #include @@ -21,28 +45,28 @@ select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, maxfd = 0; for (index = 0; index < maxfdp1; index ++) { + /* convert fd to sock */ + sock = dfs_lwip_getsocket(index); + if (sock == -1) continue; + + if (sock > maxfd) maxfd = sock; + + /* if FD is set, set the socket set */ if (readset && FD_ISSET(index, readset)) { - sock = dfs_lwip_getsocket(index); - if (sock > maxfd) maxfd = sock; FD_SET(sock, &sock_readset); } - if (writeset && FD_ISSET(index, writeset)) { - sock = dfs_lwip_getsocket(index); - if (sock > maxfd) maxfd = sock; FD_SET(sock, &sock_writeset); } - if (exceptset && FD_ISSET(index, exceptset)) { - sock = dfs_lwip_getsocket(index); - if (sock > maxfd) maxfd = sock; FD_SET(sock, &sock_exceptset); } } + /* no socket found, return bad file descriptor */ if (maxfd == 0) return -EBADF; maxfd += 1;