2 * Check decoding of accept syscall.
4 * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
5 * Copyright (c) 2016-2019 The strace developers.
8 * SPDX-License-Identifier: GPL-2.0-or-later
17 #if defined __NR_accept
19 # ifndef TEST_SYSCALL_NAME
20 # define TEST_SYSCALL_NAME do_accept
22 # ifndef TEST_SYSCALL_STR
23 # define TEST_SYSCALL_STR "accept"
26 int do_accept(int sockfd, void *addr, void *addrlen)
28 return syscall(__NR_accept, sockfd, addr, addrlen);
30 # endif /* !TEST_SYSCALL_NAME */
32 #else /* !__NR_accept */
34 # ifndef TEST_SYSCALL_NAME
35 # define TEST_SYSCALL_NAME accept
38 #endif /* __NR_accept */
40 #define TEST_SYSCALL_PREPARE connect_un()
41 static void connect_un(void);
47 int cfd = socket(AF_UNIX, SOCK_STREAM, 0);
49 perror_msg_and_skip("socket");
51 struct sockaddr_un un = {
52 .sun_family = AF_UNIX,
53 .sun_path = TEST_SOCKET ".connect"
56 (void) unlink(un.sun_path);
57 if (bind(cfd, (const void *) &un, sizeof(un)))
58 perror_msg_and_skip("bind");
59 (void) unlink(un.sun_path);
61 un.sun_path[sizeof(TEST_SOCKET) - 1] = '\0';
62 if (connect(cfd, (const void *) &un, sizeof(un)))
63 perror_msg_and_skip("connect");
69 int lfd = socket(AF_UNIX, SOCK_STREAM, 0);
71 perror_msg_and_skip("socket");
73 (void) unlink(TEST_SOCKET);
75 const struct sockaddr_un un = {
76 .sun_family = AF_UNIX,
77 .sun_path = TEST_SOCKET
80 if (bind(lfd, (const void *) &un, sizeof(un)))
81 perror_msg_and_skip("bind");
83 perror_msg_and_skip("listen");
85 test_sockname_syscall(lfd);
87 (void) unlink(TEST_SOCKET);
89 puts("+++ exited with 0 +++");