mirror of
https://github.com/janet-lang/janet
synced 2024-11-24 17:27:18 +00:00
Pass non-blocking pipes to subprocesses on non-windows platform.
This commit is contained in:
parent
a3ec37741a
commit
0774e79e4f
@ -2558,15 +2558,16 @@ void janet_ev_sendto_string(JanetStream *stream, JanetString str, void *dest, in
|
|||||||
static volatile long PipeSerialNumber;
|
static volatile long PipeSerialNumber;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mode = 0: both sides non-blocking.
|
||||||
|
* mode = 1: only read side non-blocking: write side sent to subprocess
|
||||||
|
* mode = 2: only write side non-blocking: read side sent to subprocess
|
||||||
|
*/
|
||||||
int janet_make_pipe(JanetHandle handles[2], int mode) {
|
int janet_make_pipe(JanetHandle handles[2], int mode) {
|
||||||
#ifdef JANET_WINDOWS
|
#ifdef JANET_WINDOWS
|
||||||
/*
|
/*
|
||||||
* On windows, the built in CreatePipe function doesn't support overlapped IO
|
* On windows, the built in CreatePipe function doesn't support overlapped IO
|
||||||
* so we lift from the windows source code and modify for our own version.
|
* so we lift from the windows source code and modify for our own version.
|
||||||
*
|
|
||||||
* mode = 0: both sides non-blocking.
|
|
||||||
* mode = 1: only read side non-blocking: write side sent to subprocess
|
|
||||||
* mode = 2: only write side non-blocking: read side sent to subprocess
|
|
||||||
*/
|
*/
|
||||||
JanetHandle shandle, chandle;
|
JanetHandle shandle, chandle;
|
||||||
UCHAR PipeNameBuffer[MAX_PATH];
|
UCHAR PipeNameBuffer[MAX_PATH];
|
||||||
@ -2616,10 +2617,9 @@ int janet_make_pipe(JanetHandle handles[2], int mode) {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
(void) mode;
|
|
||||||
if (pipe(handles)) return -1;
|
if (pipe(handles)) return -1;
|
||||||
if (fcntl(handles[0], F_SETFL, O_NONBLOCK)) goto error;
|
if (mode != 2 && fcntl(handles[0], F_SETFL, O_NONBLOCK)) goto error;
|
||||||
if (fcntl(handles[1], F_SETFL, O_NONBLOCK)) goto error;
|
if (mode != 1 && fcntl(handles[1], F_SETFL, O_NONBLOCK)) goto error;
|
||||||
return 0;
|
return 0;
|
||||||
error:
|
error:
|
||||||
close(handles[0]);
|
close(handles[0]);
|
||||||
|
Loading…
Reference in New Issue
Block a user