AROS: it is called IoctlSocket/CloseSocket and WaitSelect on AROS.
[deb_libnfs.git] / aros / aros_compat.c
CommitLineData
d7c6e9aa
RS
1/*
2 Copyright (C) 2013 by Ronnie Sahlberg <ronniesahlberg@gmail.com>
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifdef AROS
19
2cdf4fcb
RS
20#include <stdio.h>
21#include <stdlib.h>
22#include <stdring.h>
d7c6e9aa
RS
23#include <sys/types.h>
24#include <sys/time.h>
25#include "aros_compat.h"
26
27#undef poll
28
e77d093c
RS
29/* unix device major/minor numbers dont make much sense on amiga */
30int major(int i)
31{
32 return 1;
33}
34int minor(int i)
35{
36 return 2;
37}
d7c6e9aa 38
2cdf4fcb
RS
39struct Library * SocketBase = NULL;
40
41void aros_init_socket(void)
42{
43 if (!(SocketBase = OpenLibrary("bsdsocket.library", 4))) {
44 printf("No TCP/IP stack available.\n");
45 exit(10);
46 }
47}
48
d7c6e9aa
RS
49int aros_poll(struct pollfd *fds, unsigned int nfds, int timo)
50{
51 struct timeval timeout, *toptr;
52 fd_set ifds, ofds, efds, *ip, *op;
53 unsigned int i;
54 int rc;
55
56 // Set up the file-descriptor sets in ifds, ofds and efds.
57 FD_ZERO(&ifds);
58 FD_ZERO(&ofds);
59 FD_ZERO(&efds);
60 for (i = 0, op = ip = 0; i < nfds; ++i)
61 {
62 fds[i].revents = 0;
63 if(fds[i].events & (POLLIN|POLLPRI))
64 {
65 ip = &ifds;
66 FD_SET(fds[i].fd, ip);
67 }
68 if(fds[i].events & POLLOUT)
69 {
70 op = &ofds;
71 FD_SET(fds[i].fd, op);
72 }
73 FD_SET(fds[i].fd, &efds);
74 }
75
76 // Set up the timeval structure for the timeout parameter
77 if(timo < 0)
78 {
79 toptr = 0;
80 }
81 else
82 {
83 toptr = &timeout;
84 timeout.tv_sec = timo / 1000;
85 timeout.tv_usec = (timo - timeout.tv_sec * 1000) * 1000;
86 }
87
2cdf4fcb 88 rc = WaitSelect(0, ip, op, &efds, toptr, NULL);
d7c6e9aa
RS
89
90 if(rc <= 0)
91 return rc;
92
93 if(rc > 0)
94 {
95 for (i = 0; i < nfds; ++i)
96 {
97 int fd = fds[i].fd;
98 if(fds[i].events & (POLLIN|POLLPRI) && FD_ISSET(fd, &ifds))
99 fds[i].revents |= POLLIN;
100 if(fds[i].events & POLLOUT && FD_ISSET(fd, &ofds))
101 fds[i].revents |= POLLOUT;
102 if(FD_ISSET(fd, &efds)) // Some error was detected ... should be some way to know.
103 fds[i].revents |= POLLHUP;
104 }
105 }
106 return rc;
107}
108
109#endif