From 11dc64a71558948aef16730cb363e7e5da773a5b Mon Sep 17 00:00:00 2001 From: Steffen Date: Mon, 13 Feb 2023 17:32:16 +0100 Subject: [PATCH 1/3] Add custom error function for tests. On musl systems, liburing cannot build examples and tests due to it's usage of error.h. t_error calls fprintf(stderr, ...) and exits. Closes: #786 Signed-off-by: Steffen Winter --- a/test/helpers.c +++ b/test/helpers.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -300,3 +301,20 @@ unsigned __io_uring_flush_sq(struct io_uring *ring) */ return tail - *sq->khead; } + +/* + * Implementation of error(3), prints an error message and exits. + */ +void t_error(int status, int errnum, const char *format, ...) +{ + va_list args; + va_start(args, format); + + vfprintf(stderr, format, args); + if (errnum) + fprintf(stderr, ": %s", strerror(errnum)); + + fprintf(stderr, "\n"); + va_end(args); + exit(status); +} --- a/test/helpers.h +++ b/test/helpers.h @@ -89,6 +89,8 @@ unsigned __io_uring_flush_sq(struct io_uring *ring); #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +void t_error(int status, int errnum, const char *format, ...); + #ifdef __cplusplus } #endif From 3b0b4976d7da2e4616fe860fb7a8e52d88d4523b Mon Sep 17 00:00:00 2001 From: Steffen Date: Mon, 13 Feb 2023 17:56:03 +0100 Subject: [PATCH 2/3] test: Use t_error instead of glibc's error. On musl systems, liburing cannot build examples and tests due to it's usage of error.h. Replacing calls to error() with t_error(). Closes: #786 Signed-off-by: Steffen Winter --- a/test/defer-taskrun.c +++ b/test/defer-taskrun.c @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include --- a/test/send-zerocopy.c +++ b/test/send-zerocopy.c @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include --- a/test/single-issuer.c +++ b/test/single-issuer.c @@ -5,7 +5,6 @@ #include #include #include -#include #include #include @@ -56,13 +55,13 @@ static int try_submit(struct io_uring *ring) return ret; if (ret != 1) - error(1, ret, "submit %i", ret); + t_error(1, ret, "submit %i", ret); ret = io_uring_wait_cqe(ring, &cqe); if (ret) - error(1, ret, "wait fail %i", ret); + t_error(1, ret, "wait fail %i", ret); if (cqe->res || cqe->user_data != 42) - error(1, ret, "invalid cqe"); + t_error(1, ret, "invalid cqe"); io_uring_cqe_seen(ring, cqe); return 0; @@ -105,7 +104,7 @@ int main(int argc, char *argv[]) ret = io_uring_queue_init(8, &ring, IORING_SETUP_SINGLE_ISSUER | IORING_SETUP_R_DISABLED); if (ret) - error(1, ret, "ring init (2) %i", ret); + t_error(1, ret, "ring init (2) %i", ret); if (!fork_t()) { io_uring_enable_rings(&ring); @@ -121,7 +120,7 @@ int main(int argc, char *argv[]) ret = io_uring_queue_init(8, &ring, IORING_SETUP_SINGLE_ISSUER | IORING_SETUP_R_DISABLED); if (ret) - error(1, ret, "ring init (3) %i", ret); + t_error(1, ret, "ring init (3) %i", ret); io_uring_enable_rings(&ring); if (!fork_t()) { @@ -136,7 +135,7 @@ int main(int argc, char *argv[]) /* test that anyone can submit to a SQPOLL|SINGLE_ISSUER ring */ ret = io_uring_queue_init(8, &ring, IORING_SETUP_SINGLE_ISSUER|IORING_SETUP_SQPOLL); if (ret) - error(1, ret, "ring init (4) %i", ret); + t_error(1, ret, "ring init (4) %i", ret); ret = try_submit(&ring); if (ret) { @@ -156,7 +155,7 @@ int main(int argc, char *argv[]) /* test that IORING_ENTER_REGISTERED_RING doesn't break anything */ ret = io_uring_queue_init(8, &ring, IORING_SETUP_SINGLE_ISSUER); if (ret) - error(1, ret, "ring init (5) %i", ret); + t_error(1, ret, "ring init (5) %i", ret); if (!fork_t()) { ret = try_submit(&ring);