1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-25 07:50:27 +00:00

Merge pull request #717 from yumaikas/fix-os-open-write-windows

Fix os open write windows, and add TerminateProcess calls
This commit is contained in:
Calvin Rose 2021-07-24 07:52:40 -05:00 committed by GitHub
commit f11b2c5a0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 0 deletions

View File

@ -1808,6 +1808,16 @@ JanetAsyncStatus ev_machine_write(JanetListenerState *s, JanetAsyncEvent event)
} else
#endif
{
// File handles in IOCP need to specify this if they are writing to the
// ends of files, like how this is used here.
// If the underlying resource doesn't support seeking
// byte offsets, they will be ignored
// but this otherwise writes to the end of the file in question
// Right now, os/open streams aren't seekable, so this works.
// for more details see the lpOverlapped parameter in
// https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile
state->overlapped.Offset = (DWORD) 0xFFFFFFFF;
state->overlapped.OffsetHigh = (DWORD) 0xFFFFFFFF;
status = WriteFile(s->stream->handle, bytes, len, NULL, &state->overlapped);
if (!status && (ERROR_IO_PENDING != WSAGetLastError())) {
janet_cancel(s->fiber, janet_ev_lasterr());

View File

@ -105,6 +105,18 @@
(file/close outfile)
(os/rm "unique.txt"))
# Ensure that the stream created by os/open works
(assert-no-error "File writing 4.1"
(def outstream (os/open "unique.txt" :wct))
(defer (:close outstream)
(:write outstream "123\n")
(:write outstream "456\n"))
# Cast to string to enable comparison
(assert (= "123\n456\n" (string (slurp "unique.txt"))) "File writing 4.2")
(os/rm "unique.txt"))
# ev/gather
(assert (deep= @[1 2 3] (ev/gather 1 2 3)) "ev/gather 1")