1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-02-01 06:12:31 +00:00

Update fcntl F_SETFL usage. (#144)

This changes from `FASYNC` to `O_ASYNC`, `FNDELAY` to `O_NONBLOCK`,
and `O_NDELAY` to `O_NONBLOCK`. These are the modern names.

`O_NONBLOCK` is part of the POSIX standard. However, `O_ASYNC` is
specific to Linux and BSD. It is not available on Solaris, where
we still need to use `FASYNC`. Also, the behavior of having I/O
trigger a `SIGIO` signal is not in POSIX, since the `SIGIO` signal
is not in POSIX. Instead, it is only the behavior of having `SIGURG`
being signalled for out of band data that is specified.

We also takes this opportunity to collapse some multi-line calls
to get the flags, store it into a temp, and then set them, to
just doing it in one line, skipping the stored temporary value.

We also change one instance of `65535 - FNDELAY` to `~O_NONBLOCK`.

Closes interlisp/medley#85.
This commit is contained in:
Bruce Mitchener
2020-12-31 08:28:34 +07:00
committed by GitHub
parent 3b1bdd225f
commit 6adb79840d
16 changed files with 42 additions and 58 deletions

View File

@@ -225,7 +225,7 @@ of the packet received except:
int fork_Unix() {
int LispToUnix[2], /* Incoming pipe from LISP */
UnixToLisp[2], /* Outgoing pipe to LISP */
UnixPID, LispPipeIn, LispPipeOut, flags, slot;
UnixPID, LispPipeIn, LispPipeOut, slot;
pid_t pid;
char IOBuf[4];
@@ -292,9 +292,7 @@ int fork_Unix() {
close(LispToUnix[1]);
close(UnixToLisp[0]);
flags = fcntl(LispPipeIn, F_GETFL, 0);
flags &= (65535 - FNDELAY);
fcntl(LispPipeIn, F_SETFL, flags);
fcntl(LispPipeIn, F_SETFL, fcntl(LispPipeIn, F_GETFL, 0) & ~O_NONBLOCK);
while (1) {
ssize_t len;