From: Lennart Poettering Date: Wed, 3 Nov 2021 14:56:48 +0000 (+0100) Subject: test: add test that ensures TAKE_FD() works as it should X-Git-Tag: v250-rc1~364^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a70877d8815819563f624a2a7973a18174361544;p=thirdparty%2Fsystemd.git test: add test that ensures TAKE_FD() works as it should --- diff --git a/src/test/test-fd-util.c b/src/test/test-fd-util.c index 0aa229fbc9a..3638103bf14 100644 --- a/src/test/test-fd-util.c +++ b/src/test/test-fd-util.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include "alloc-util.h" @@ -486,6 +487,47 @@ static void test_fd_reopen(void) { fd1 = -1; } +static void test_take_fd(void) { + _cleanup_close_ int fd1 = -1, fd2 = -1; + int array[2] = { -1, -1 }, i = 0; + + log_info("/* %s */", __func__); + + assert_se(fd1 == -1); + assert_se(fd2 == -1); + + fd1 = eventfd(0, EFD_CLOEXEC); + assert_se(fd1 >= 0); + + fd2 = TAKE_FD(fd1); + assert_se(fd1 == -1); + assert_se(fd2 >= 0); + + assert_se(array[0] == -1); + assert_se(array[1] == -1); + + array[0] = TAKE_FD(fd2); + assert_se(fd1 == -1); + assert_se(fd2 == -1); + assert_se(array[0] >= 0); + assert_se(array[1] == -1); + + array[1] = TAKE_FD(array[i]); + assert_se(array[0] == -1); + assert_se(array[1] >= 0); + + i = 1 - i; + array[0] = TAKE_FD(*(array + i)); + assert_se(array[0] >= 0); + assert_se(array[1] == -1); + + i = 1 - i; + fd1 = TAKE_FD(array[i]); + assert_se(fd1 >= 0); + assert_se(array[0] == -1); + assert_se(array[1] == -1); +} + int main(int argc, char *argv[]) { test_setup_logging(LOG_DEBUG); @@ -500,6 +542,7 @@ int main(int argc, char *argv[]) { test_close_all_fds(); test_format_proc_fd_path(); test_fd_reopen(); + test_take_fd(); return 0; }