From e086a1c18367325ca806ee2793e2de4b88ed1ff5 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 14 Aug 2017 20:25:53 -0700 Subject: [PATCH] Added missing files from the previous commit --- src/core/unix/SDL_poll.c | 88 ++++++++++++++++++++++++++++++++++++++++ src/core/unix/SDL_poll.h | 34 ++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 src/core/unix/SDL_poll.c create mode 100644 src/core/unix/SDL_poll.h diff --git a/src/core/unix/SDL_poll.c b/src/core/unix/SDL_poll.c new file mode 100644 index 000000000..b970a7a08 --- /dev/null +++ b/src/core/unix/SDL_poll.c @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2017 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#include "SDL_assert.h" +#include "SDL_poll.h" + +#undef HAVE_POLL +#ifdef HAVE_POLL +#include +#else +#include +#include +#include +#endif +#include + + +int +SDL_IOReady(int fd, SDL_bool forWrite, int timeoutMS) +{ + int result; + + /* Note: We don't bother to account for elapsed time if we get EINTR */ + do + { +#ifdef HAVE_POLL + struct pollfd info; + + info.fd = fd; + if (forWrite) { + info.events = POLLOUT; + } else { + info.events = POLLIN | POLLPRI; + } + result = poll(&info, 1, timeoutMS); +#else + fd_set rfdset, *rfdp = NULL; + fd_set wfdset, *wfdp = NULL; + struct timeval tv, *tvp = NULL; + + /* If this assert triggers we'll corrupt memory here */ + SDL_assert(fd >= 0 && fd < FD_SETSIZE); + + if (forWrite) { + FD_ZERO(&wfdset); + FD_SET(fd, &wfdset); + wfdp = &wfdset; + } else { + FD_ZERO(&rfdset); + FD_SET(fd, &rfdset); + rfdp = &rfdset; + } + + if (timeoutMS >= 0) { + tv.tv_sec = timeoutMS / 1000; + tv.tv_usec = (timeoutMS % 1000) * 1000; + tvp = &tv; + } + + result = select(fd + 1, rfdp, wfdp, NULL, tvp); +#endif /* HAVE_POLL */ + + } while ( result < 0 && errno == EINTR ); + + return result; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/core/unix/SDL_poll.h b/src/core/unix/SDL_poll.h new file mode 100644 index 000000000..9a23b8463 --- /dev/null +++ b/src/core/unix/SDL_poll.h @@ -0,0 +1,34 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2017 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#ifndef SDL_poll_h_ +#define SDL_poll_h_ + +#include "SDL_stdinc.h" + + +extern int SDL_IOReady(int fd, SDL_bool forWrite, int timeoutMS); + +#endif /* SDL_poll_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */