bugfix with io.Reader and greedy mode
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 3 Sep 2022 02:38:24 +0000 (21:38 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 3 Sep 2022 02:38:24 +0000 (21:38 -0500)
core/io/reader.onyx
src/onyx_runtime.c

index 3b9140354a0fd80769a5ceb6903e66edcbd789f6..31c8aae4ce20586d2ca9d08f942afc17becf93b3 100644 (file)
@@ -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;
index c1fac328b51274fb57e957acb5c2c135f1108d8b..58257c045ef0263e905f92656e3542fd37c60d7c 100644 (file)
@@ -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; i<params->data[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;
     }