mirror of
https://github.com/janet-lang/janet
synced 2025-01-13 09:00:26 +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:
commit
f11b2c5a0d
@ -1808,6 +1808,16 @@ JanetAsyncStatus ev_machine_write(JanetListenerState *s, JanetAsyncEvent event)
|
|||||||
} else
|
} else
|
||||||
#endif
|
#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);
|
status = WriteFile(s->stream->handle, bytes, len, NULL, &state->overlapped);
|
||||||
if (!status && (ERROR_IO_PENDING != WSAGetLastError())) {
|
if (!status && (ERROR_IO_PENDING != WSAGetLastError())) {
|
||||||
janet_cancel(s->fiber, janet_ev_lasterr());
|
janet_cancel(s->fiber, janet_ev_lasterr());
|
||||||
|
@ -105,6 +105,18 @@
|
|||||||
(file/close outfile)
|
(file/close outfile)
|
||||||
(os/rm "unique.txt"))
|
(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
|
# ev/gather
|
||||||
|
|
||||||
(assert (deep= @[1 2 3] (ev/gather 1 2 3)) "ev/gather 1")
|
(assert (deep= @[1 2 3] (ev/gather 1 2 3)) "ev/gather 1")
|
||||||
|
Loading…
Reference in New Issue
Block a user