aboutsummaryrefslogtreecommitdiffstats
path: root/src/pty-unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pty-unix.c')
-rw-r--r--src/pty-unix.c33
1 files changed, 10 insertions, 23 deletions
diff --git a/src/pty-unix.c b/src/pty-unix.c
index 5431528..7c06c9b 100644
--- a/src/pty-unix.c
+++ b/src/pty-unix.c
@@ -8,8 +8,8 @@
#include "runes.h"
-static void runes_pty_backend_read(uv_work_t *req);
-static void runes_pty_backend_got_data(uv_work_t *req, int status);
+static void runes_pty_backend_read(RunesTerm *t);
+static int runes_pty_backend_got_data(RunesTerm *t);
void runes_pty_backend_spawn_subprocess(RunesTerm *t)
{
@@ -86,15 +86,8 @@ void runes_pty_backend_spawn_subprocess(RunesTerm *t)
void runes_pty_backend_init_loop(RunesTerm *t)
{
- void *data;
-
- data = malloc(sizeof(RunesLoopData));
- ((RunesLoopData *)data)->req.data = data;
- ((RunesLoopData *)data)->t = t;
-
- uv_queue_work(
- t->loop.loop, data, runes_pty_backend_read,
- runes_pty_backend_got_data);
+ runes_loop_start_work(t, runes_pty_backend_read,
+ runes_pty_backend_got_data);
}
void runes_pty_backend_set_window_size(RunesTerm *t)
@@ -132,10 +125,8 @@ void runes_pty_backend_cleanup(RunesTerm *t)
close(pty->master);
}
-static void runes_pty_backend_read(uv_work_t *req)
+static void runes_pty_backend_read(RunesTerm *t)
{
- RunesLoopData *data = req->data;
- RunesTerm *t = data->t;
RunesPtyBackend *pty = &t->pty;
runes_window_backend_request_flush(t);
@@ -144,26 +135,22 @@ static void runes_pty_backend_read(uv_work_t *req)
RUNES_READ_BUFFER_LENGTH - pty->remaininglen);
}
-static void runes_pty_backend_got_data(uv_work_t *req, int status)
+static int runes_pty_backend_got_data(RunesTerm *t)
{
- RunesLoopData *data = req->data;
- RunesTerm *t = data->t;
RunesPtyBackend *pty = &t->pty;
- UNUSED(status);
-
if (pty->readlen > 0) {
int to_process = pty->readlen + pty->remaininglen;
int processed = vt100_screen_process_string(
&t->scr, pty->readbuf, to_process);
pty->remaininglen = to_process - processed;
memmove(pty->readbuf, pty->readbuf + processed, pty->remaininglen);
- uv_queue_work(
- t->loop.loop, req, runes_pty_backend_read,
- runes_pty_backend_got_data);
+
+ return 1;
}
else {
runes_window_backend_request_close(t);
- free(req);
+
+ return 0;
}
}