ObjFW  Diff

Differences From Artifact [458ef336b0]:

To Artifact [e4119778c6]:


24
25
26
27
28
29
30
31

32
33
34
35
36
37
38
24
25
26
27
28
29
30

31
32
33
34
35
36
37
38







-
+







# include <poll.h>
#endif

#import "OFPollKernelEventObserver.h"
#import "OFData.h"
#import "OFSocket+Private.h"

#import "OFObserveFailedException.h"
#import "OFObserveKernelEventsFailedException.h"
#import "OFOutOfRangeException.h"

#ifdef OF_WII
# define pollfd pollsd
# define fd socket
#endif

70
71
72
73
74
75
76

77
78


79
80
81
82
83
84
85
70
71
72
73
74
75
76
77


78
79
80
81
82
83
84
85
86







+
-
-
+
+







addObject(OFPollKernelEventObserver *self, id object, int fd, short events)
{
	struct pollfd *FDs;
	size_t count;
	bool found;

	if (fd < 0)
		@throw [OFObserveKernelEventsFailedException
		@throw [OFObserveFailedException exceptionWithObserver: self
								 errNo: EBADF];
		    exceptionWithObserver: self
				    errNo: EBADF];

	FDs = self->_FDs.mutableItems;
	count = self->_FDs.count;
	found = false;

	for (size_t i = 0; i < count; i++) {
		if (FDs[i].fd == fd) {
106
107
108
109
110
111
112

113
114


115
116
117
118
119
120
121
107
108
109
110
111
112
113
114


115
116
117
118
119
120
121
122
123







+
-
-
+
+







static void
removeObject(OFPollKernelEventObserver *self, id object, int fd, short events)
{
	struct pollfd *FDs;
	size_t nFDs;

	if (fd < 0)
		@throw [OFObserveKernelEventsFailedException
		@throw [OFObserveFailedException exceptionWithObserver: self
								 errNo: EBADF];
		    exceptionWithObserver: self
				    errNo: EBADF];

	FDs = self->_FDs.mutableItems;
	nFDs = self->_FDs.count;

	for (size_t i = 0; i < nFDs; i++) {
		if (FDs[i].fd == fd) {
			FDs[i].events &= ~events;
181
182
183
184
185
186
187

188
189


190
191
192
193
194
195
196
183
184
185
186
187
188
189
190


191
192
193
194
195
196
197
198
199







+
-
-
+
+







		@throw [OFOutOfRangeException exception];
#endif

	events = poll(FDs, (nfds_t)nFDs,
	    (int)(timeInterval != -1 ? timeInterval * 1000 : -1));

	if (events < 0)
		@throw [OFObserveKernelEventsFailedException
		@throw [OFObserveFailedException exceptionWithObserver: self
								 errNo: errno];
		    exceptionWithObserver: self
				    errNo: errno];

	for (size_t i = 0; i < nFDs; i++) {
		assert(FDs[i].fd <= _maxFD);

		if (FDs[i].revents & POLLIN) {
			void *pool2;