X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftest%2Ftest-util.c;fp=src%2Ftest%2Ftest-util.c;h=3c79f8f4d98719282187ec26624eb1975c3fdcef;hp=3f1b5487f01050f27ecd28866a6d91c1323c2727;hb=f7ad54a301e4ae8dceab54d3ab3934e56c1134ea;hpb=a7e07206021c6484a8d33c6ee156ecfb5b90534c diff --git a/src/test/test-util.c b/src/test/test-util.c index 3f1b5487f..3c79f8f4d 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -1381,6 +1381,40 @@ static void test_raw_clone(void) { } } +static void test_same_fd(void) { + _cleanup_close_pair_ int p[2] = { -1, -1 }; + _cleanup_close_ int a = -1, b = -1, c = -1; + + assert_se(pipe2(p, O_CLOEXEC) >= 0); + assert_se((a = dup(p[0])) >= 0); + assert_se((b = open("/dev/null", O_RDONLY|O_CLOEXEC)) >= 0); + assert_se((c = dup(a)) >= 0); + + assert_se(same_fd(p[0], p[0]) > 0); + assert_se(same_fd(p[1], p[1]) > 0); + assert_se(same_fd(a, a) > 0); + assert_se(same_fd(b, b) > 0); + + assert_se(same_fd(a, p[0]) > 0); + assert_se(same_fd(p[0], a) > 0); + assert_se(same_fd(c, p[0]) > 0); + assert_se(same_fd(p[0], c) > 0); + assert_se(same_fd(a, c) > 0); + assert_se(same_fd(c, a) > 0); + + assert_se(same_fd(p[0], p[1]) == 0); + assert_se(same_fd(p[1], p[0]) == 0); + assert_se(same_fd(p[0], b) == 0); + assert_se(same_fd(b, p[0]) == 0); + assert_se(same_fd(p[1], a) == 0); + assert_se(same_fd(a, p[1]) == 0); + assert_se(same_fd(p[1], b) == 0); + assert_se(same_fd(b, p[1]) == 0); + + assert_se(same_fd(a, b) == 0); + assert_se(same_fd(b, a) == 0); +} + int main(int argc, char *argv[]) { log_parse_environment(); log_open(); @@ -1455,6 +1489,7 @@ int main(int argc, char *argv[]) { test_unquote_many_words(); test_parse_proc_cmdline(); test_raw_clone(); + test_same_fd(); return 0; }