]> granicus.if.org Git - strace/blob - tests/ustat.c
Update copyright headers
[strace] / tests / ustat.c
1 /*
2  * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
3  * Copyright (c) 2017-2018 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 <asm/unistd.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