(root)/
strace-6.5/
src/
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@strace.io>
       9   * Copyright (c) 2014-2021 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  	/* pathname */
      27  	printpath(tcp, tcp->u_arg[offset]);
      28  	tprint_arg_next();
      29  
      30  	/* mode */
      31  	print_symbolic_mode_t(mode);
      32  
      33  	switch (mode & S_IFMT) {
      34  	case S_IFCHR:
      35  	case S_IFBLK:
      36  		dev = tcp->u_arg[offset + 2];
      37  		tprint_arg_next();
      38  
      39  		/* dev */
      40  		print_dev_t(dev);
      41  		break;
      42  	}
      43  }
      44  
      45  SYS_FUNC(mknod)
      46  {
      47  	decode_mknod(tcp, 0);
      48  
      49  	return RVAL_DECODED;
      50  }
      51  
      52  SYS_FUNC(mknodat)
      53  {
      54  	/* dirfd */
      55  	print_dirfd(tcp, tcp->u_arg[0]);
      56  	tprint_arg_next();
      57  
      58  	decode_mknod(tcp, 1);
      59  
      60  	return RVAL_DECODED;
      61  }