(root)/
strace-6.5/
tests/
ustat.c
       1  /*
       2   * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
       3   * Copyright (c) 2017-2019 The strace developers.
       4   * All rights reserved.
       5   *
       6   * SPDX-License-Identifier: GPL-2.0-or-later
       7   */
       8  
       9  #include "tests.h"
      10  #include "scno.h"
      11  
      12  #ifdef __NR_ustat
      13  
      14  # include <stdio.h>
      15  # include <sys/stat.h>
      16  # include <sys/sysmacros.h>
      17  # include <unistd.h>
      18  # ifdef HAVE_USTAT_H
      19  #  include <ustat.h>
      20  # endif
      21  
      22  int
      23  main(void)
      24  {
      25  	const kernel_ulong_t magic = (kernel_ulong_t) 0xfacefeedffffffff;
      26  	unsigned long long buf[4];
      27  	unsigned int dev;
      28  	long rc;
      29  
      30  # ifdef HAVE_USTAT_H
      31  	TAIL_ALLOC_OBJECT_CONST_PTR(struct ustat, ust);
      32  	struct stat st;
      33  	if (stat(".", &st))
      34  		perror_msg_and_fail("stat");
      35  
      36  	dev = (unsigned int) st.st_dev;
      37  	rc = syscall(__NR_ustat, dev, ust);
      38  	if (rc)
      39  		printf("ustat(makedev(%#x, %#x), %p) = %s\n",
      40  		       major(dev), minor(dev), ust, sprintrc(rc));
      41  	else
      42  		printf("ustat(makedev(%#x, %#x)"
      43  		       ", {f_tfree=%llu, f_tinode=%llu}) = 0\n",
      44  		       major(dev), minor(dev),
      45  		       zero_extend_signed_to_ull(ust->f_tfree),
      46  		       zero_extend_signed_to_ull(ust->f_tinode));
      47  # endif /* HAVE_USTAT_H */
      48  
      49  	dev = (unsigned int) magic;
      50  	rc = syscall(__NR_ustat, magic, 0);
      51  	printf("ustat(makedev(%#x, %#x), NULL) = %s\n",
      52  	       major(dev), minor(dev), sprintrc(rc));
      53  
      54  	rc = syscall(__NR_ustat, magic, buf);
      55  	printf("ustat(makedev(%#x, %#x), %p) = %s\n",
      56  	       major(dev), minor(dev), buf, sprintrc(rc));
      57  
      58  	puts("+++ exited with 0 +++");
      59  	return 0;
      60  }
      61  
      62  #else
      63  
      64  SKIP_MAIN_UNDEFINED("__NR_ustat")
      65  
      66  #endif