From 4d1f07f53fc7b7420d7380112899e55bbc4f53f0 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 20 Aug 2004 00:09:26 +0000 Subject: [PATCH] read line fix --- native/iomux.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/native/iomux.c b/native/iomux.c index 38e730d014..a56df8fbb0 100644 --- a/native/iomux.c +++ b/native/iomux.c @@ -111,6 +111,8 @@ bool set_up_fd_set(fd_set* fdset, int fd_count, IO_TASK* io_tasks) bool perform_read_line_io_task(PORT* port) { + SBUF* line; + if(port->buf_pos >= port->buf_fill) { if(!read_step(port)) @@ -120,7 +122,12 @@ bool perform_read_line_io_task(PORT* port) if(port->buf_fill == 0) { /* EOF */ - port->line = F; + if(port->line != F) + { + line = untag_sbuf(port->line); + if(line->top == 0) + port->line = F; + } port->line_ready = true; return true; } @@ -130,6 +137,11 @@ bool perform_read_line_io_task(PORT* port) } } +bool perform_read_count_io_task(PORT* port) +{ + return false; +} + bool perform_write_io_task(PORT* port) { if(write_step(port)) @@ -149,6 +161,7 @@ CELL perform_io_task(IO_TASK* task) { PORT* port = untag_port(task->port); CELL callback = task->callback; + switch(task->type) { case IO_TASK_READ_LINE: @@ -163,6 +176,18 @@ CELL perform_io_task(IO_TASK* task) &read_fd_count); return F; } + case IO_TASK_READ_COUNT: + remove_io_task(IO_TASK_READ_COUNT,port, + read_io_tasks,&read_fd_count); + if(perform_read_count_io_task(port)) + return callback; + else + { + add_io_task(IO_TASK_READ_COUNT,port, + callback,read_io_tasks, + &read_fd_count); + return F; + } case IO_TASK_WRITE: remove_io_task(IO_TASK_WRITE,port, write_io_tasks,&write_fd_count);