From 3cd75f17b87d5d6e3e23b7e854c6898ba84d17f6 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 2 Sep 2022 21:38:24 -0500 Subject: [PATCH] bugfix with io.Reader and greedy mode --- core/io/reader.onyx | 8 ++++++-- src/onyx_runtime.c | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/io/reader.onyx b/core/io/reader.onyx index 3b914035..31c8aae4 100644 --- a/core/io/reader.onyx +++ b/core/io/reader.onyx @@ -320,6 +320,7 @@ read_line :: (use reader: ^Reader, consume_newline := true, allocator := context if !done { while reader_read_next_chunk(reader) == .ReadPending --- + if error == .NoProgress do done = true; } if reader_empty(reader) do done = true; @@ -390,6 +391,7 @@ read_word :: (use reader: ^Reader, numeric_allowed := false, allocator := contex if !done { while reader_read_next_chunk(reader) == .ReadPending --- + if error == .NoProgress do done = true; } if reader_empty(reader) do done = true; @@ -457,6 +459,7 @@ read_until :: (use reader: ^Reader, until: u8, skip: u32 = 0, allocator := conte if !done { while reader_read_next_chunk(reader) == .ReadPending --- + if error == .NoProgress do done = true; } if reader_empty(reader) do done = true; @@ -604,14 +607,15 @@ lines :: (r: ^Reader, inplace := false) -> Iterator(str) { // if the end is equal to start because that means that the buffer is // completely empty. if err == .ReadPending { - if greedy do err = .BufferFull; + if greedy do err = .NoProgress; error = err; return err if end == 0 else .None; } end += n; if err != .None { - if err == .EOF do done = true; + if err == .EOF do done = true; + if err == .BadFile do done = true; error = err; return .None; diff --git a/src/onyx_runtime.c b/src/onyx_runtime.c index c1fac328..58257c04 100644 --- a/src/onyx_runtime.c +++ b/src/onyx_runtime.c @@ -1260,11 +1260,11 @@ ONYX_DEF(__net_poll_recv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) { int i, res, cursor; struct pollfd* fds; - fds = alloca(params->data[1].of.i32 * sizeof(struct pollfd)); // Guessed size of pollfd + fds = alloca(params->data[1].of.i32 * sizeof(struct pollfd)); for (i=0; idata[1].of.i32; i++) { fds[i].fd = *(i32 *) ONYX_PTR(params->data[0].of.i32 + 4 * i); - fds[i].events = -1; + fds[i].events = POLLIN; fds[i].revents = 0; } -- 2.25.1