ObjFW  Check-in [d76213374e]

Overview
Comment:OFKernelEventObserver: Reorder #ifdefs

Check for AmigaOS first, as we have a special implementation for it that
uses WaitSelect() instead. This way, we no longer need to match $host_os
to manually disable the pipe() check, which would break if one of the
AmigaOS variants adds pipe() later on.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: d76213374eb6e5c5b32423bce70e31828aca92070c255c7be38b8b418397177c
User & Date: js on 2020-11-29 02:44:17
Other Links: manifest | tags
Context
2020-11-29
04:02
OFSelectKernelEventObserver: Move FD_ZERO check-in: 4504bd4141 user: js tags: trunk
02:44
OFKernelEventObserver: Reorder #ifdefs check-in: d76213374e user: js tags: trunk
02:21
Fix a few places using msec instead of usec check-in: 208285040f user: js tags: trunk
Changes

Modified configure.ac from [94728735e5] to [228ea25515].

1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335



1336
1337
1338
1339
1340
1341
1342
1343
1344
1322
1323
1324
1325
1326
1327
1328







1329
1330
1331


1332
1333
1334
1335
1336
1337
1338







-
-
-
-
-
-
-
+
+
+
-
-







			[Whether strerror_r returns char *])
	])
])

AC_CHECK_HEADERS(sys/utsname.h)
AC_CHECK_FUNCS(uname)

case "$host_os" in
	amigaos*)
		;;
	*)
		AC_CHECK_FUNC(pipe, [
			AC_DEFINE(OF_HAVE_PIPE, 1, [Whether we have pipe()])
		])
AC_CHECK_FUNC(pipe, [
	AC_DEFINE(OF_HAVE_PIPE, 1, [Whether we have pipe()])
])
		;;
esac

AC_ARG_ENABLE(sockets,
	AS_HELP_STRING([--disable-sockets], [disable socket support]))
AS_IF([test x"$enable_sockets" != x"no"], [
	AC_DEFINE(OF_HAVE_SOCKETS, 1, [Whether we have sockets])
	AC_SUBST(USE_SRCS_SOCKETS, '${SRCS_SOCKETS}')

Modified src/OFKernelEventObserver.h from [74da8f3153] to [e557d74842].

120
121
122
123
124
125
126
127

128
129
130
131


132
133
134
135
136
137
138
120
121
122
123
124
125
126

127


128
129
130
131
132
133
134
135
136
137
138







-
+
-
-


+
+







@interface OFKernelEventObserver: OFObject
{
	OFMutableArray OF_GENERIC(id <OFReadyForReadingObserving>)
	    *_readObjects;
	OFMutableArray OF_GENERIC(id <OFReadyForWritingObserving>)
	    *_writeObjects;
	id <OFKernelEventObserverDelegate> _Nullable _delegate;
#if defined(OF_HAVE_PIPE)
#if defined(OF_AMIGAOS)
	int _cancelFD[2];
#elif defined(OF_AMIGAOS)
	struct Task *_waitingTask;
	ULONG _cancelSignal;
#elif defined(OF_HAVE_PIPE)
	int _cancelFD[2];
#else
	of_socket_t _cancelFD[2];
	struct sockaddr_in _cancelAddr;
#endif
#ifdef OF_AMIGAOS
	ULONG _execSignalMask;
#endif

Modified src/OFKernelEventObserver.m from [0cbb2bba17] to [451fcb3cdf].

111
112
113
114
115
116
117
118

119
120
121
122
123
124
125
111
112
113
114
115
116
117

118
119
120
121
122
123
124
125







-
+







    !defined(OF_NINTENDO_3DS)
		socklen_t cancelAddrLen;
#endif

		_readObjects = [[OFMutableArray alloc] init];
		_writeObjects = [[OFMutableArray alloc] init];

#if defined(OF_HAVE_PIPE)
#if defined(OF_HAVE_PIPE) && !defined(OF_AMIGAOS)
		if (pipe(_cancelFD))
			@throw [OFInitializationFailedException
			    exceptionWithClass: self.class];
#elif !defined(OF_AMIGAOS)
		_cancelFD[0] = _cancelFD[1] = socket(AF_INET, SOCK_DGRAM, 0);

		if (_cancelFD[0] == INVALID_SOCKET)
172
173
174
175
176
177
178
179

180
181
182
183
184
185
186
172
173
174
175
176
177
178

179
180
181
182
183
184
185
186







-
+







	}

	return self;
}

- (void)dealloc
{
#if defined(OF_HAVE_PIPE)
#if defined(OF_HAVE_PIPE) && !defined(OF_AMIGAOS)
	close(_cancelFD[0]);
	if (_cancelFD[1] != _cancelFD[0])
		close(_cancelFD[1]);
#elif !defined(OF_AMIGAOS)
	closesocket(_cancelFD[0]);
	if (_cancelFD[1] != _cancelFD[0])
		closesocket(_cancelFD[1]);
255
256
257
258
259
260
261
262

263
264
265
266
267
268
269
270
271
272


273
274
275
276
277
278
279
280
281
255
256
257
258
259
260
261

262


263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281







-
+
-
-








+
+









- (void)observeUntilDate: (OFDate *)date
{
	[self observeForTimeInterval: date.timeIntervalSinceNow];
}

- (void)cancel
{
#if defined(OF_HAVE_PIPE)
#if defined(OF_AMIGAOS)
	OF_ENSURE(write(_cancelFD[1], "", 1) > 0);
#elif defined(OF_AMIGAOS)
	Forbid();

	if (_waitingTask != NULL) {
		Signal(_waitingTask, (1ul << _cancelSignal));
		_waitingTask = NULL;
	}

	Permit();
#elif defined(OF_HAVE_PIPE)
	OF_ENSURE(write(_cancelFD[1], "", 1) > 0);
#elif defined(OF_WII)
	OF_ENSURE(sendto(_cancelFD[1], "", 1, 0,
	    (struct sockaddr *)&_cancelAddr, 8) > 0);
#else
	OF_ENSURE(sendto(_cancelFD[1], (void *)"", 1, 0,
	    (struct sockaddr *)&_cancelAddr, sizeof(_cancelAddr)) > 0);
#endif
}
@end