]> granicus.if.org Git - strace/blob - mknod.c
maint: update for linux v5.3-rc8
[strace] / mknod.c
1 /*
2  * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
3  * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
4  * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
5  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
6  * Copyright (c) 2006 Ulrich Drepper <drepper@redhat.com>
7  * Copyright (c) 2006 Bernhard Kaindl <bk@suse.de>
8  * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
9  * Copyright (c) 2014-2019 The strace developers.
10  * All rights reserved.
11  *
12  * SPDX-License-Identifier: LGPL-2.1-or-later
13  */
14
15 #include "defs.h"
16
17 #include <fcntl.h>
18 #include <sys/stat.h>
19
20 static void
21 decode_mknod(struct tcb *tcp, int offset)
22 {
23         unsigned short mode = tcp->u_arg[offset + 1];
24         unsigned int dev;
25
26         printpath(tcp, tcp->u_arg[offset]);
27         tprints(", ");
28         print_symbolic_mode_t(mode);
29         switch (mode & S_IFMT) {
30         case S_IFCHR:
31         case S_IFBLK:
32                 dev = tcp->u_arg[offset + 2];
33                 tprints(", ");
34                 print_dev_t(dev);
35                 break;
36         }
37 }
38
39 SYS_FUNC(mknod)
40 {
41         decode_mknod(tcp, 0);
42
43         return RVAL_DECODED;
44 }
45
46 SYS_FUNC(mknodat)
47 {
48         print_dirfd(tcp, tcp->u_arg[0]);
49         tprints(", ");
50         decode_mknod(tcp, 1);
51
52         return RVAL_DECODED;
53 }