summaryrefslogtreecommitdiff
path: root/uring.c
diff options
context:
space:
mode:
Diffstat (limited to 'uring.c')
-rw-r--r--uring.c60
1 files changed, 32 insertions, 28 deletions
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;