@@ -24,16 +24,15 @@ # include #endif #import "OFPollKernelEventObserver.h" #import "OFData.h" +#import "OFSocket+Private.h" #import "OFObserveFailedException.h" #import "OFOutOfRangeException.h" -#import "socket_helpers.h" - #ifdef OF_WII # define pollfd pollsd # define fd socket #endif @@ -48,11 +47,11 @@ _FDs = [[OFMutableData alloc] initWithItemSize: sizeof(struct pollfd)]; [_FDs addItem: &p]; _maxFD = _cancelFD[0]; - _FDToObject = of_alloc((size_t)_maxFD + 1, sizeof(id)); + _FDToObject = OFAllocMemory((size_t)_maxFD + 1, sizeof(id)); } @catch (id e) { [self release]; @throw e; } @@ -60,29 +59,28 @@ } - (void)dealloc { [_FDs release]; - free(_FDToObject); + OFFreeMemory(_FDToObject); [super dealloc]; } -- (void)of_addObject: (id)object - fileDescriptor: (int)fd - events: (short)events OF_DIRECT +static void +addObject(OFPollKernelEventObserver *self, id object, int fd, short events) { struct pollfd *FDs; size_t count; bool found; if (fd < 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: EBADF]; - FDs = _FDs.mutableItems; - count = _FDs.count; + FDs = self->_FDs.mutableItems; + count = self->_FDs.count; found = false; for (size_t i = 0; i < count; i++) { if (FDs[i].fd == fd) { FDs[i].events |= events; @@ -92,34 +90,33 @@ } if (!found) { struct pollfd p = { fd, events, 0 }; - if (fd > _maxFD) { - _maxFD = fd; - _FDToObject = of_realloc(_FDToObject, - (size_t)_maxFD + 1, sizeof(id)); + if (fd > self->_maxFD) { + self->_maxFD = fd; + self->_FDToObject = OFResizeMemory(self->_FDToObject, + (size_t)self->_maxFD + 1, sizeof(id)); } - _FDToObject[fd] = object; - [_FDs addItem: &p]; + self->_FDToObject[fd] = object; + [self->_FDs addItem: &p]; } } -- (void)of_removeObject: (id)object - fileDescriptor: (int)fd - events: (short)events OF_DIRECT +static void +removeObject(OFPollKernelEventObserver *self, id object, int fd, short events) { struct pollfd *FDs; size_t nFDs; if (fd < 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: EBADF]; - FDs = _FDs.mutableItems; - nFDs = _FDs.count; + 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; @@ -126,55 +123,47 @@ if (FDs[i].events == 0) { /* * TODO: Remove from and resize _FDToObject, * adjust _maxFD. */ - [_FDs removeItemAtIndex: i]; + [self->_FDs removeItemAtIndex: i]; } break; } } } - (void)addObjectForReading: (id )object { - [self of_addObject: object - fileDescriptor: object.fileDescriptorForReading - events: POLLIN]; + addObject(self, object, object.fileDescriptorForReading, POLLIN); [super addObjectForReading: object]; } - (void)addObjectForWriting: (id )object { - [self of_addObject: object - fileDescriptor: object.fileDescriptorForWriting - events: POLLOUT]; + addObject(self, object, object.fileDescriptorForWriting, POLLOUT); [super addObjectForWriting: object]; } - (void)removeObjectForReading: (id )object { - [self of_removeObject: object - fileDescriptor: object.fileDescriptorForReading - events: POLLIN]; + removeObject(self, object, object.fileDescriptorForReading, POLLIN); [super removeObjectForReading: object]; } - (void)removeObjectForWriting: (id )object { - [self of_removeObject: object - fileDescriptor: object.fileDescriptorForWriting - events: POLLOUT]; + removeObject(self, object, object.fileDescriptorForWriting, POLLOUT); [super removeObjectForWriting: object]; } -- (void)observeForTimeInterval: (of_time_interval_t)timeInterval +- (void)observeForTimeInterval: (OFTimeInterval)timeInterval { void *pool; struct pollfd *FDs; int events; size_t nFDs; @@ -207,14 +196,14 @@ if (FDs[i].fd == _cancelFD[0]) { char buffer; #ifdef OF_HAVE_PIPE - OF_ENSURE(read(_cancelFD[0], &buffer, 1) == 1); + OFEnsure(read(_cancelFD[0], &buffer, 1) == 1); #else - OF_ENSURE(recvfrom(_cancelFD[0], &buffer, 1, - 0, NULL, NULL) == 1); + OFEnsure(recvfrom(_cancelFD[0], &buffer, 1, 0, + NULL, NULL) == 1); #endif FDs[i].revents = 0; continue; }