1
2
3
4
5
6
7
8
9
10
11
|
/*
* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
* 2018, 2019, 2020
* Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
<
<
|
|
1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
{
struct kevent event;
memset(&event, 0, sizeof(event));
event.ident = object.fileDescriptorForReading;
event.filter = EVFILT_READ;
event.flags = EV_ADD;
#ifndef OF_NETBSD
event.udata = object;
#else
event.udata = (intptr_t)object;
#endif
if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0)
@throw [OFObserveFailedException exceptionWithObserver: self
errNo: errno];
[super addObjectForReading: object];
}
- (void)addObjectForWriting: (id <OFReadyForWritingObserving>)object
{
struct kevent event;
memset(&event, 0, sizeof(event));
event.ident = object.fileDescriptorForWriting;
event.filter = EVFILT_WRITE;
event.flags = EV_ADD;
#ifndef OF_NETBSD
event.udata = object;
#else
event.udata = (intptr_t)object;
#endif
if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0)
@throw [OFObserveFailedException exceptionWithObserver: self
errNo: errno];
[super addObjectForWriting: object];
}
|
>
>
|
>
|
<
<
<
>
>
|
>
|
<
<
<
|
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
{
struct kevent event;
memset(&event, 0, sizeof(event));
event.ident = object.fileDescriptorForReading;
event.filter = EVFILT_READ;
event.flags = EV_ADD;
/*
* Ugly hack required for NetBSD: NetBSD used `intptr_t` for udata, but
* switched this to `void *` in NetBSD 10.
*/
event.udata = (__typeof__(event.udata))object;
if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0)
@throw [OFObserveFailedException exceptionWithObserver: self
errNo: errno];
[super addObjectForReading: object];
}
- (void)addObjectForWriting: (id <OFReadyForWritingObserving>)object
{
struct kevent event;
memset(&event, 0, sizeof(event));
event.ident = object.fileDescriptorForWriting;
event.filter = EVFILT_WRITE;
event.flags = EV_ADD;
/*
* Ugly hack required for NetBSD: NetBSD used `intptr_t` for udata, but
* switched this to `void *` in NetBSD 10.
*/
event.udata = (__typeof__(event.udata))object;
if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0)
@throw [OFObserveFailedException exceptionWithObserver: self
errNo: errno];
[super addObjectForWriting: object];
}
|