Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / modules / rosapps / applications / net / ncftp / sio / SSelect.c
diff --git a/modules/rosapps/applications/net/ncftp/sio/SSelect.c b/modules/rosapps/applications/net/ncftp/sio/SSelect.c
new file mode 100644 (file)
index 0000000..b495d56
--- /dev/null
@@ -0,0 +1,74 @@
+#include "syshdrs.h"
+
+void
+SelectSetInit(SelectSetPtr const ssp, const double timeout)
+{
+       double i;
+       long l;
+
+       /* Inititalize SelectSet, which will clear the fd_set, the
+        * timeval, and the maxfd and numfds to 0.
+        */
+       memset(ssp, 0, sizeof(SelectSet));
+       l = (long) timeout;
+       i = (double) l;
+       ssp->timeout.tv_sec = l;
+       ssp->timeout.tv_usec = (long) ((timeout - i) * 1000000.0);
+}      /* SelectSetInit */
+
+
+
+
+void
+SelectSetAdd(SelectSetPtr const ssp, const int fd)
+{
+       if (fd >= 0) {
+               FD_SET(fd, &ssp->fds);
+               if (ssp->maxfd < (fd + 1))
+                       ssp->maxfd = (fd + 1);
+               ++ssp->numfds;
+       }
+}      /* SelectSetAdd */
+
+
+
+
+void
+SelectSetRemove(SelectSetPtr const ssp, const int fd)
+{
+       if ((fd >= 0) && (FD_ISSET(fd, &ssp->fds))) {
+               FD_CLR(fd, &ssp->fds);
+               /* Note that maxfd is left alone, even if maxfd was
+                * this one.  That is okay.
+                */
+               --ssp->numfds;
+       }
+}      /* SelectSetRemove */
+
+
+
+int
+SelectW(SelectSetPtr ssp, SelectSetPtr resultssp)
+{
+       int rc;
+
+       do {
+               memcpy(resultssp, ssp, sizeof(SelectSet));
+               rc = select(resultssp->maxfd, NULL, SELECT_TYPE_ARG234 &resultssp->fds, NULL, SELECT_TYPE_ARG5 &resultssp->timeout);
+       } while ((rc < 0) && (errno == EINTR));
+       return (rc);
+}      /* SelectW */
+
+
+
+int
+SelectR(SelectSetPtr ssp, SelectSetPtr resultssp)
+{
+       int rc;
+
+       do {
+               memcpy(resultssp, ssp, sizeof(SelectSet));
+               rc = select(resultssp->maxfd, SELECT_TYPE_ARG234 &resultssp->fds, NULL, NULL, SELECT_TYPE_ARG5 &resultssp->timeout);
+       } while ((rc < 0) && (errno == EINTR));
+       return (rc);
+}      /* SelectR */