From af7dbbcbc9fe89deb4951d45b0f6ce839199c88b Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Wed, 10 Jun 2020 14:51:49 +0200 Subject: Convert proxy to use task_buf as well --- uring.c | 60 ++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 28 deletions(-) (limited to 'uring.c') diff --git a/uring.c b/uring.c index 30cf513..58d6f2f 100644 --- a/uring.c +++ b/uring.c @@ -236,20 +236,6 @@ uring_write(struct cfg *cfg, struct uring_task *task, void *buf, size_t len, cal io_uring_sqe_set_data(sqe, task); } -static int -uring_tbuf_complete_eof(struct cfg *cfg, struct uring_task *task, int res) -{ - if (task->tbuf->len + 1 >= sizeof(task->tbuf->buf)) - return -E2BIG; - - if (res > 0) - return 1; - - task->tbuf->buf[task->tbuf->len] = '\0'; - task->tbuf->len++; - return 0; -} - static void uring_tbuf_read_until_cb(struct cfg *cfg, struct uring_task *task, int res) { @@ -281,9 +267,9 @@ uring_tbuf_read_until_cb(struct cfg *cfg, struct uring_task *task, int res) goto finished; } - uring_read(cfg, task, task->tbuf->buf + task->tbuf->len, - sizeof(task->tbuf->buf) - task->tbuf->len, - task->tbuf->len, uring_tbuf_read_until_cb); + uring_read_offset(cfg, task, task->tbuf->buf + task->tbuf->len, + sizeof(task->tbuf->buf) - task->tbuf->len, + task->tbuf->len, uring_tbuf_read_until_cb); return; finished: @@ -295,14 +281,6 @@ void uring_tbuf_read_until(struct cfg *cfg, struct uring_task *task, rcallback_t complete, callback_t callback) { - if (!task) - error("task\n"); - if (task->fd < 0) - error("task->fd\n"); - if (!task->tbuf) - error("task->tbuf\n"); - if (!complete) - error("complete\n"); if (!task || task->fd < 0 || !task->tbuf || !complete) { error("%s: invalid parameters\n", __func__); return; @@ -311,17 +289,43 @@ uring_tbuf_read_until(struct cfg *cfg, struct uring_task *task, task->tbuf->len = 0; task->complete_callback = complete; task->final_callback = callback; - uring_read(cfg, task, &task->tbuf->buf, sizeof(task->tbuf->buf), 0, uring_tbuf_read_until_cb); + uring_read(cfg, task, &task->tbuf->buf, sizeof(task->tbuf->buf), uring_tbuf_read_until_cb); +} + +static int +uring_tbuf_eof(struct cfg *cfg, struct uring_task *task, int res) +{ + if (task->tbuf->len + 1 >= sizeof(task->tbuf->buf)) + return -E2BIG; + + if (res > 0) + return 0; + + task->tbuf->buf[task->tbuf->len] = '\0'; + task->tbuf->len++; + return 1; } void uring_tbuf_read_until_eof(struct cfg *cfg, struct uring_task *task, callback_t callback) { - uring_tbuf_read_until(cfg, task, uring_tbuf_complete_eof, callback); + uring_tbuf_read_until(cfg, task, uring_tbuf_eof, callback); +} + +static int +uring_tbuf_have_data(struct cfg *cfg, struct uring_task *task, int res) +{ + return res; +} + +void +uring_tbuf_read(struct cfg *cfg, struct uring_task *task, callback_t callback) +{ + uring_tbuf_read_until(cfg, task, uring_tbuf_have_data, callback); } void -uring_read(struct cfg *cfg, struct uring_task *task, void *buf, size_t len, off_t offset, callback_t callback) +uring_read_offset(struct cfg *cfg, struct uring_task *task, void *buf, size_t len, off_t offset, callback_t callback) { struct io_uring_sqe *sqe; -- cgit v1.2.3