Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'UNIX/uxpoll.c')
-rw-r--r--UNIX/uxpoll.c169
1 files changed, 0 insertions, 169 deletions
diff --git a/UNIX/uxpoll.c b/UNIX/uxpoll.c
deleted file mode 100644
index 474926bb..00000000
--- a/UNIX/uxpoll.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* On some systems this is needed to get poll.h to define eg.. POLLRDNORM */
-#define _XOPEN_SOURCE
-
-#include <poll.h>
-
-#include "putty.h"
-#include "tree234.h"
-
-struct pollwrapper {
- struct pollfd *fds;
- size_t nfd, fdsize;
- tree234 *fdtopos;
-};
-
-typedef struct pollwrap_fdtopos pollwrap_fdtopos;
-struct pollwrap_fdtopos {
- int fd;
- size_t pos;
-};
-
-static int pollwrap_fd_cmp(void *av, void *bv)
-{
- pollwrap_fdtopos *a = (pollwrap_fdtopos *)av;
- pollwrap_fdtopos *b = (pollwrap_fdtopos *)bv;
- return a->fd < b->fd ? -1 : a->fd > b->fd ? +1 : 0;
-}
-
-pollwrapper *pollwrap_new(void)
-{
- pollwrapper *pw = snew(pollwrapper);
- pw->fdsize = 16;
- pw->nfd = 0;
- pw->fds = snewn(pw->fdsize, struct pollfd);
- pw->fdtopos = newtree234(pollwrap_fd_cmp);
- return pw;
-}
-
-void pollwrap_free(pollwrapper *pw)
-{
- pollwrap_clear(pw);
- freetree234(pw->fdtopos);
- sfree(pw->fds);
- sfree(pw);
-}
-
-void pollwrap_clear(pollwrapper *pw)
-{
- pw->nfd = 0;
- for (pollwrap_fdtopos *f2p;
- (f2p = delpos234(pw->fdtopos, 0)) != NULL ;)
- sfree(f2p);
-}
-
-void pollwrap_add_fd_events(pollwrapper *pw, int fd, int events)
-{
- pollwrap_fdtopos *f2p, f2p_find;
-
- assert(fd >= 0);
-
- f2p_find.fd = fd;
- f2p = find234(pw->fdtopos, &f2p_find, NULL);
- if (!f2p) {
- sgrowarray(pw->fds, pw->fdsize, pw->nfd);
- size_t index = pw->nfd++;
- pw->fds[index].fd = fd;
- pw->fds[index].events = pw->fds[index].revents = 0;
-
- f2p = snew(pollwrap_fdtopos);
- f2p->fd = fd;
- f2p->pos = index;
- pollwrap_fdtopos *added = add234(pw->fdtopos, f2p);
- assert(added == f2p);
- }
-
- pw->fds[f2p->pos].events |= events;
-}
-
-/* Omit any of the POLL{RD,WR}{NORM,BAND} flag values that are still
- * not defined by poll.h, just in case */
-#ifndef POLLRDNORM
-#define POLLRDNORM 0
-#endif
-#ifndef POLLRDBAND
-#define POLLRDBAND 0
-#endif
-#ifndef POLLWRNORM
-#define POLLWRNORM 0
-#endif
-#ifndef POLLWRBAND
-#define POLLWRBAND 0
-#endif
-
-#define SELECT_R_IN (POLLIN | POLLRDNORM | POLLRDBAND)
-#define SELECT_W_IN (POLLOUT | POLLWRNORM | POLLWRBAND)
-#define SELECT_X_IN (POLLPRI)
-
-#define SELECT_R_OUT (SELECT_R_IN | POLLERR | POLLHUP)
-#define SELECT_W_OUT (SELECT_W_IN | POLLERR)
-#define SELECT_X_OUT (SELECT_X_IN)
-
-void pollwrap_add_fd_rwx(pollwrapper *pw, int fd, int rwx)
-{
- int events = 0;
- if (rwx & SELECT_R)
- events |= SELECT_R_IN;
- if (rwx & SELECT_W)
- events |= SELECT_W_IN;
- if (rwx & SELECT_X)
- events |= SELECT_X_IN;
- pollwrap_add_fd_events(pw, fd, events);
-}
-
-int pollwrap_poll_instant(pollwrapper *pw)
-{
- return poll(pw->fds, pw->nfd, 0);
-}
-
-int pollwrap_poll_endless(pollwrapper *pw)
-{
- return poll(pw->fds, pw->nfd, -1);
-}
-
-int pollwrap_poll_timeout(pollwrapper *pw, int milliseconds)
-{
- assert(milliseconds >= 0);
- return poll(pw->fds, pw->nfd, milliseconds);
-}
-
-static void pollwrap_get_fd_events_revents(pollwrapper *pw, int fd,
- int *events_p, int *revents_p)
-{
- pollwrap_fdtopos *f2p, f2p_find;
- int events = 0, revents = 0;
-
- assert(fd >= 0);
-
- f2p_find.fd = fd;
- f2p = find234(pw->fdtopos, &f2p_find, NULL);
- if (f2p) {
- events = pw->fds[f2p->pos].events;
- revents = pw->fds[f2p->pos].revents;
- }
-
- if (events_p)
- *events_p = events;
- if (revents_p)
- *revents_p = revents;
-}
-
-int pollwrap_get_fd_events(pollwrapper *pw, int fd)
-{
- int revents;
- pollwrap_get_fd_events_revents(pw, fd, NULL, &revents);
- return revents;
-}
-
-int pollwrap_get_fd_rwx(pollwrapper *pw, int fd)
-{
- int events, revents;
- pollwrap_get_fd_events_revents(pw, fd, &events, &revents);
- int rwx = 0;
- if ((events & POLLIN) && (revents & SELECT_R_OUT))
- rwx |= SELECT_R;
- if ((events & POLLOUT) && (revents & SELECT_W_OUT))
- rwx |= SELECT_W;
- if ((events & POLLPRI) && (revents & SELECT_X_OUT))
- rwx |= SELECT_X;
- return rwx;
-}