From fd6b8e3e46073e59bd37c3e25d090f24a3c3a1a8 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 21 Mar 2022 23:28:42 -0500 Subject: [PATCH] bugfixes in core reader / openal libraries --- core/conv.onyx | 4 +-- core/io/io.onyx | 3 ++ core/io/reader.onyx | 52 +++++++++++++++++++--------- core/net/net.onyx | 25 +++++++++---- docs/todo | 6 ++-- include/onyx_library.h | 2 +- modules/onyx_runtime/onyx_runtime.c | 10 +++++- modules/openal/module.onyx | 6 ++-- modules/openal/onyx_openal.c | 9 ++++- modules/openal/onyx_openal.so | Bin 86464 -> 87384 bytes 10 files changed, 84 insertions(+), 33 deletions(-) diff --git a/core/conv.onyx b/core/conv.onyx index 278d0a50..f9042243 100644 --- a/core/conv.onyx +++ b/core/conv.onyx @@ -78,14 +78,14 @@ str_to_i64 :: (s: str, base: u32 = 10) -> i64 { if base <= 10 do fallthrough; value *= ~~base; - value += ~~(c - #char "A"); + value += ~~((c - #char "A") + 10); } case #char "a" .. #char "z" { if base <= 10 do fallthrough; value *= ~~base; - value += ~~(c - #char "a"); + value += ~~((c - #char "a") + 10); } case #default do break break; diff --git a/core/io/io.onyx b/core/io/io.onyx index 71739d89..f6a56452 100644 --- a/core/io/io.onyx +++ b/core/io/io.onyx @@ -29,4 +29,7 @@ Error :: enum { // Not possible to unread. InvalidUnread :: 0x09; + + // When reading from a stream, no data was read. + ReadPending :: 0x0a; } \ No newline at end of file diff --git a/core/io/reader.onyx b/core/io/reader.onyx index c60ba6ed..d2cecc3a 100644 --- a/core/io/reader.onyx +++ b/core/io/reader.onyx @@ -120,6 +120,7 @@ unread_byte :: (use reader: ^Reader) -> Error { return .None; } + read_bytes :: (use reader: ^Reader, bytes: [] u8) -> (i32, Error) { n := bytes.count; if n == 0 { @@ -132,23 +133,31 @@ read_bytes :: (use reader: ^Reader, bytes: [] u8) -> (i32, Error) { if reader_empty(reader) do return 0, reader_consume_error(reader); if n >= buffer.count { - error, n = stream_read(stream, bytes); + while true { + error, n = stream_read(stream, bytes); + if error != .ReadPending do break; + } if n > 0 do last_byte = cast(i32) bytes[n - 1]; - return n, reader_consume_error(reader); } + } - start, end = 0, 0; - error, n = stream_read(stream, buffer); - if n == 0 do return 0, reader_consume_error(reader); - end += n; + write_index := 0; + while n > 0 { + if reader_read_next_chunk(reader) == .ReadPending { + return write_index, .ReadPending; + } + + to_write := math.min(n, end); + memory.copy(bytes.data + write_index, buffer.data, to_write); + n -= to_write; + write_index += to_write; + start += to_write; } - memory.copy(bytes.data, buffer.data + start, n); - start += n; - last_byte = cast(i32) buffer[start - 1]; - return n, .None; + last_byte = cast(i32) bytes[bytes.count - 1]; + return bytes.count, .None; } read_string :: (use reader: ^Reader, bytes := 1, allocator := context.allocator) -> str { @@ -245,8 +254,10 @@ read_u64 :: (use reader: ^Reader) -> u64 { return n; } -read_line :: (use reader: ^Reader, consume_newline := true, allocator := context.allocator, inplace := false) -> str { - reader_read_next_chunk(reader); +read_line :: (use reader: ^Reader, consume_newline := true, allocator := context.allocator, inplace := false, shift_buffer := true) -> str { + if shift_buffer { + while reader_read_next_chunk(reader) == .ReadPending --- + } count := start; defer start = count; @@ -266,9 +277,11 @@ read_line :: (use reader: ^Reader, consume_newline := true, allocator := context return out; } -read_word :: (use reader: ^Reader, numeric_allowed := false, allocator := context.allocator, inplace := false) -> str { +read_word :: (use reader: ^Reader, numeric_allowed := false, allocator := context.allocator, inplace := false, shift_buffer := true) -> str { skip_whitespace(reader); - reader_read_next_chunk(reader); + if shift_buffer { + while reader_read_next_chunk(reader) == .ReadPending --- + } count := start; defer start = count; @@ -292,8 +305,10 @@ read_word :: (use reader: ^Reader, numeric_allowed := false, allocator := contex return out; } -read_until :: (use reader: ^Reader, until: u8, skip: u32 = 0, allocator := context.allocator, consume_end := false, inplace := false) -> str { - reader_read_next_chunk(reader); +read_until :: (use reader: ^Reader, until: u8, skip: u32 = 0, allocator := context.allocator, consume_end := false, inplace := false, shift_buffer := true) -> str { + if shift_buffer { + while reader_read_next_chunk(reader) == .ReadPending --- + } count := start; defer start = count; @@ -410,6 +425,11 @@ skip_bytes :: (use reader: ^Reader, bytes: u32) -> (skipped: i32, err: Error) { // Try to re-read multiple times for 16 { err, n := stream_read(stream, buffer[end .. buffer.count]); + if err == .ReadPending { + error = err; + return err if end == 0 else .None; + } + end += n; if err != .None { if err == .EOF do done = true; diff --git a/core/net/net.onyx b/core/net/net.onyx index 45799c00..82bf9b04 100644 --- a/core/net/net.onyx +++ b/core/net/net.onyx @@ -144,8 +144,12 @@ socket_sendall :: (s: ^Socket, data: [] u8) { socket_recv :: (s: ^Socket, maxlen := 1024, allocator := context.allocator) -> [] u8 { buffer := alloc.from_stack(maxlen); - received := __net_recv(s.handle, .{ buffer, maxlen }); - if received < 0 { s.vtable = null; return .[]; } + would_block: bool; + received := __net_recv(s.handle, .{ buffer, maxlen }, ^would_block); + if received < 0 { + if !would_block do s.vtable = null; + return .[]; + } result := memory.make_slice(u8, received, allocator=allocator); memory.copy(result.data, buffer, received); @@ -154,8 +158,11 @@ socket_recv :: (s: ^Socket, maxlen := 1024, allocator := context.allocator) -> [ } socket_recv_into :: (s: ^Socket, buffer: [] u8) -> i32 { - received := __net_recv(s.handle, buffer); - if received < 0 { s.vtable = null; } + would_block: bool; + received := __net_recv(s.handle, buffer, ^would_block); + if received < 0 && !would_block do s.vtable = null; + if would_block do return 0; + return received; } @@ -163,8 +170,12 @@ socket_recv_into :: (s: ^Socket, buffer: [] u8) -> i32 { read = (use s: ^Socket, buffer: [] u8) -> (io.Error, u32) { if handle == 0 do return .BadFile, 0; - bytes_read := __net_recv(handle, buffer); - if bytes_read < 0 { s.vtable = null; } + would_block := false; + bytes_read := __net_recv(handle, buffer, ^would_block); + if bytes_read < 0 && !would_block do s.vtable = null; + + if would_block do return .ReadPending, bytes_read; + return .None, bytes_read; }, @@ -191,7 +202,7 @@ socket_recv_into :: (s: ^Socket, buffer: [] u8) -> i32 { #package __net_accept :: (handle: Socket.Handle, out_address: ^Socket_Address.Handle) -> Socket.Handle --- #package __net_connect :: (handle: Socket.Handle, host: str, port: u16) -> SocketError --- #package __net_send :: (handle: Socket.Handle, data: [] u8) -> i32 --- - #package __net_recv :: (handle: Socket.Handle, data: [] u8) -> i32 --- + #package __net_recv :: (handle: Socket.Handle, data: [] u8, async_would_block: ^bool) -> i32 --- #package __net_poll_recv :: (handle: [] Socket.Handle, timeout: i32, out_recv_indicies: ^i32) -> i32 --- #package __net_address_get_address :: (address: Socket_Address.Handle, out_buffer: [] u8) -> i32 --- diff --git a/docs/todo b/docs/todo index 02dbdee4..3ba0ab4c 100644 --- a/docs/todo +++ b/docs/todo @@ -217,10 +217,10 @@ Wishlist: Revamping File System: - [ ] runtime.fs should contain runtime specific file system API calls - [ ] 'os.File' should effectily be 'os.FileStream' and FileStream should go away + [x] runtime.fs should contain runtime specific file system API calls + [x] 'os.File' should effectily be 'os.FileStream' and FileStream should go away os.File :: struct { use stream: io.Stream; use data: runtime.fs.FileData; } - [ ] Most file functionality will be provided using the stream API. + [x] Most file functionality will be provided using the stream API. diff --git a/include/onyx_library.h b/include/onyx_library.h index 4361c753..d4aae4b4 100644 --- a/include/onyx_library.h +++ b/include/onyx_library.h @@ -24,7 +24,7 @@ typedef struct OnyxRuntime { // HACK HACK HACK // There should need to be this much stuff in here, but because Wasmer doesn't ship a "wasmerdll.lib" // file for windows, it is impossible for it to link successfully against the function provided in onyx.exe. - // Therefore, we must serve as the linker and do this manually. Hopefully they that library file + // Therefore, we must serve as the linker and do this manually. Hopefully that library file will be // shipped soon so this can go away... char* (*wasm_memory_data)(wasm_memory_t *wasm_memory); wasm_extern_t* (*wasm_extern_lookup_by_name)(wasm_module_t* module, wasm_instance_t* instance, const char* name); diff --git a/modules/onyx_runtime/onyx_runtime.c b/modules/onyx_runtime/onyx_runtime.c index f3527c35..41577ee9 100644 --- a/modules/onyx_runtime/onyx_runtime.c +++ b/modules/onyx_runtime/onyx_runtime.c @@ -950,11 +950,19 @@ ONYX_DEF(__net_send, (WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) { return NULL; } -ONYX_DEF(__net_recv, (WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) { +ONYX_DEF(__net_recv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) { + *(i32 *) ONYX_PTR(params->data[3].of.i32) = 0; + #ifdef _BH_LINUX // TODO: The flags at the end should be controllable. int received = recv(params->data[0].of.i32, ONYX_PTR(params->data[1].of.i32), params->data[2].of.i32, 0); results->data[0] = WASM_I32_VAL(received); + + if (received < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + *(i32 *) ONYX_PTR(params->data[3].of.i32) = 1; + } + } #endif return NULL; diff --git a/modules/openal/module.onyx b/modules/openal/module.onyx index 353e3629..ad5bfa50 100644 --- a/modules/openal/module.onyx +++ b/modules/openal/module.onyx @@ -1,5 +1,7 @@ package openal +use package core { cptr } + #library "onyx_openal" ALCdevice :: #distinct u64 @@ -104,8 +106,8 @@ ALCextfunc :: #distinct u64 alcCaptureSamples :: (device: ALCdevice, buf: rawptr, samples: i32) -> void --- // This returns a C-allocated string, which is not supported at the moment. - // alGetString :: (device: ALCdevice, param:i32) -> cstr --- - // alcGetString :: (device: ALCdevice, param:i32) -> cstr --- + alGetString :: (device: ALCdevice, param: i32) -> cptr(u8) --- + alcGetString :: (device: ALCdevice, param: i32) -> cptr(u8) --- } AL_FALSE :: 0 diff --git a/modules/openal/onyx_openal.c b/modules/openal/onyx_openal.c index 52d2673e..79d49249 100644 --- a/modules/openal/onyx_openal.c +++ b/modules/openal/onyx_openal.c @@ -112,6 +112,10 @@ ONYX_DEF(alDopplerFactor, (FLOAT), ()) { alDistanceModel(P(0, f32)); return NULL ONYX_DEF(alSpeedOfSound, (FLOAT), ()) { alDistanceModel(P(0, f32)); return NULL; } ONYX_DEF(alGetError, (), (INT)) { results->data[0] = WASM_I32_VAL(alGetError()); return NULL; } +ONYX_DEF(alGetString, (INT), (LONG)) { + wasm_val_init_ptr(&results->data[0], (void *) alGetString(P(0, i32))); + return NULL; +} ONYX_DEF(alcCreateContext, (LONG, PTR), (LONG)) { wasm_val_init_ptr(&results->data[0], alcCreateContext((ALCdevice *) P(0, i64), ONYX_PTR(P(1, i32)))); return NULL; } ONYX_DEF(alcMakeContextCurrent, (LONG), (BOOL)) { results->data[0] = WASM_I32_VAL(alcMakeContextCurrent((ALCcontext *) P(0, i64))); return NULL; } @@ -137,7 +141,10 @@ ONYX_DEF(alcCaptureCloseDevice, (LONG), (BOOL)) { results->data[0] = WASM_I32_VA ONYX_DEF(alcCaptureStart, (LONG), ()) { alcCaptureStart((ALCdevice *) P(0, i64)); return NULL; } ONYX_DEF(alcCaptureStop, (LONG), ()) { alcCaptureStop((ALCdevice *) P(0, i64)); return NULL; } ONYX_DEF(alcCaptureSamples, (LONG, PTR, INT), ()) { alcCaptureSamples((ALCdevice *) P(0, i64), ONYX_PTR(P(1, i32)), P(2, i32)); return NULL; } - +ONYX_DEF(alcGetString, (LONG, INT), (LONG)) { + wasm_val_init_ptr(&results->data[0], (void *) alcGetString((ALCdevice *) P(0, i64), P(1, i32))); + return NULL; +} ONYX_LIBRARY { ONYX_FUNC(alGenBuffers) diff --git a/modules/openal/onyx_openal.so b/modules/openal/onyx_openal.so index 77bd206581031ccb2a6666bc0c8390c82b41958a..7b8357933ac60f375b03645015e14b1993fca5ee 100755 GIT binary patch literal 87384 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 literal 86464 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