2 * Check decoding of umode_t type syscall arguments.
4 * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
5 * Copyright (c) 2016-2017 The strace developers.
8 * SPDX-License-Identifier: GPL-2.0-or-later
15 #ifndef TEST_SYSCALL_PREFIX_ARGS
16 # define TEST_SYSCALL_PREFIX_ARGS
18 #ifndef TEST_SYSCALL_PREFIX_STR
19 # define TEST_SYSCALL_PREFIX_STR ""
22 static const char *sample;
25 test_syscall(unsigned short mode)
27 unsigned long lmode = (unsigned long) 0xffffffffffff0000ULL | mode;
28 long rc = syscall(TEST_SYSCALL_NR, TEST_SYSCALL_PREFIX_ARGS
32 printf("%s(%s\"%s\", 00%d) = %ld %s (%m)\n",
33 TEST_SYSCALL_STR, TEST_SYSCALL_PREFIX_STR,
34 sample, (int) mode, rc, errno2name());
36 printf("%s(%s\"%s\", %#03ho) = %ld %s (%m)\n",
37 TEST_SYSCALL_STR, TEST_SYSCALL_PREFIX_STR,
38 sample, mode, rc, errno2name());
42 main(int ac, char **av)
51 test_syscall(S_IFREG);
52 test_syscall(S_IFDIR | 06);
53 test_syscall(S_IFLNK | 060);
54 test_syscall(S_IFIFO | 0600);
55 test_syscall(S_IFCHR | 024);
56 test_syscall((0xffff & ~S_IFMT) | S_IFBLK);
58 puts("+++ exited with 0 +++");