diff options
author | Mikhail Burakov <mburakov@mailbox.org> | 2022-12-25 13:50:41 +0100 |
---|---|---|
committer | Mikhail Burakov <mburakov@mailbox.org> | 2022-12-25 13:50:41 +0100 |
commit | d58fcf64d9e7a3f309a706ce6a81eb9a41eb5348 (patch) | |
tree | 56ce15a6d0a006d8c8d5e01144216d8d2d46e5f0 /io_muxer.c | |
parent | 3f1e645ee1410d90b493b2e0034e25d68bd0d3eb (diff) |
Cosmetic rework of toolbox
Diffstat (limited to 'io_muxer.c')
-rw-r--r-- | io_muxer.c | 70 |
1 files changed, 39 insertions, 31 deletions
@@ -18,27 +18,28 @@ #include "io_muxer.h" #include <poll.h> +#include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> -struct IoMuxer_Closure { - void (*callback)(void*); +struct IoMuxerTask { + void (*fun)(void*); void* user; }; -static _Bool AppendRecord(struct IoMuxer* io_muxer) { - if (io_muxer->size < io_muxer->alloc) return 1; +static bool AppendRecord(struct IoMuxer* io_muxer) { + if (io_muxer->size < io_muxer->alloc) return true; size_t alloc = io_muxer->alloc + 1; struct pollfd* pfds = realloc(io_muxer->pfds, alloc * sizeof(struct pollfd)); - if (!pfds) return 0; + if (!pfds) return false; io_muxer->pfds = pfds; - struct IoMuxer_Closure* closures = - realloc(io_muxer->closures, alloc * sizeof(struct IoMuxer_Closure)); - if (!closures) return 0; - io_muxer->closures = closures; + struct IoMuxerTask* tasks = + realloc(io_muxer->tasks, alloc * sizeof(struct IoMuxerTask)); + if (!tasks) return false; + io_muxer->tasks = tasks; io_muxer->alloc = alloc; - return 1; + return true; } static void CompressRecords(struct IoMuxer* io_muxer) { @@ -53,51 +54,58 @@ static void CompressRecords(struct IoMuxer* io_muxer) { struct pollfd pfd = io_muxer->pfds[forward]; io_muxer->pfds[forward] = io_muxer->pfds[reverse]; io_muxer->pfds[reverse] = pfd; - struct IoMuxer_Closure closure = io_muxer->closures[forward]; - io_muxer->closures[forward] = io_muxer->closures[reverse]; - io_muxer->closures[reverse] = closure; + struct IoMuxerTask task = io_muxer->tasks[forward]; + io_muxer->tasks[forward] = io_muxer->tasks[reverse]; + io_muxer->tasks[reverse] = task; } } -void IoMuxer_Create(struct IoMuxer* io_muxer) { +void IoMuxerCreate(struct IoMuxer* io_muxer) { memset(io_muxer, 0, sizeof(struct IoMuxer)); } -int IoMuxer_OnRead(struct IoMuxer* io_muxer, int fd, - void (*read_callback)(void*), void* user) { - if (!AppendRecord(io_muxer)) return -1; +bool IoMuxerOnRead(struct IoMuxer* io_muxer, int fd, void (*fun)(void*), + void* user) { + if (!AppendRecord(io_muxer)) return false; struct pollfd pfd = {.fd = fd, .events = POLLIN}; - struct IoMuxer_Closure closure = {.callback = read_callback, .user = user}; + struct IoMuxerTask task = {.fun = fun, .user = user}; io_muxer->pfds[io_muxer->size] = pfd; - io_muxer->closures[io_muxer->size] = closure; + io_muxer->tasks[io_muxer->size] = task; io_muxer->size++; - return 0; + return true; } -int IoMuxer_OnWrite(struct IoMuxer* io_muxer, int fd, - void (*write_callback)(void*), void* user) { - if (!AppendRecord(io_muxer)) return -1; +bool IoMuxerOnWrite(struct IoMuxer* io_muxer, int fd, void (*fun)(void*), + void* user) { + if (!AppendRecord(io_muxer)) return false; struct pollfd pfd = {.fd = fd, .events = POLLOUT}; - struct IoMuxer_Closure closure = {.callback = write_callback, .user = user}; + struct IoMuxerTask task = {.fun = fun, .user = user}; io_muxer->pfds[io_muxer->size] = pfd; - io_muxer->closures[io_muxer->size] = closure; + io_muxer->tasks[io_muxer->size] = task; io_muxer->size++; - return 0; + return true; } -int IoMuxer_Iterate(struct IoMuxer* io_muxer, int timeout) { +enum IoMuxerResult IoMuxerIterate(struct IoMuxer* io_muxer, int timeout) { for (;;) { CompressRecords(io_muxer); int result = poll(io_muxer->pfds, io_muxer->size, timeout); - if (result <= 0) return result; + switch (result) { + case -1: + return kIoMuxerResultError; + case 0: + return kIoMuxerResultTimeout; + default: + break; + } for (size_t i = 0; i < io_muxer->size; i++) { if (io_muxer->pfds[i].revents) - io_muxer->closures[i].callback(io_muxer->closures[i].user); + io_muxer->tasks[i].fun(io_muxer->tasks[i].user); } } } -void IoMuxer_Destroy(struct IoMuxer* io_muxer) { +void IoMuxerDestroy(struct IoMuxer* io_muxer) { free(io_muxer->pfds); - free(io_muxer->closures); + free(io_muxer->tasks); } |