7f46a469ed67185d8d1ad20a2a7aebe77fefb1aa
2 Copyright (C) 2013 by Ronnie Sahlberg <ronniesahlberg@gmail.com>
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.
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.
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/>.
20 #include <sys/types.h>
22 #include "aros_compat.h"
26 /* unix device major/minor numbers dont make much sense on amiga */
36 int aros_poll(struct pollfd
*fds
, unsigned int nfds
, int timo
)
38 struct timeval timeout
, *toptr
;
39 fd_set ifds
, ofds
, efds
, *ip
, *op
;
43 // Set up the file-descriptor sets in ifds, ofds and efds.
47 for (i
= 0, op
= ip
= 0; i
< nfds
; ++i
)
50 if(fds
[i
].events
& (POLLIN
|POLLPRI
))
53 FD_SET(fds
[i
].fd
, ip
);
55 if(fds
[i
].events
& POLLOUT
)
58 FD_SET(fds
[i
].fd
, op
);
60 FD_SET(fds
[i
].fd
, &efds
);
63 // Set up the timeval structure for the timeout parameter
71 timeout
.tv_sec
= timo
/ 1000;
72 timeout
.tv_usec
= (timo
- timeout
.tv_sec
* 1000) * 1000;
75 rc
= select(0, ip
, op
, &efds
, toptr
);
82 for (i
= 0; i
< nfds
; ++i
)
85 if(fds
[i
].events
& (POLLIN
|POLLPRI
) && FD_ISSET(fd
, &ifds
))
86 fds
[i
].revents
|= POLLIN
;
87 if(fds
[i
].events
& POLLOUT
&& FD_ISSET(fd
, &ofds
))
88 fds
[i
].revents
|= POLLOUT
;
89 if(FD_ISSET(fd
, &efds
)) // Some error was detected ... should be some way to know.
90 fds
[i
].revents
|= POLLHUP
;