]> granicus.if.org Git - strace/blob - print_struct_stat.c
tests: implement ioctl_evdev-success-v.test via ioctl_evdev-success.test
[strace] / print_struct_stat.c
1 /*
2  * Copyright (c) 1999-2003 Ulrich Drepper <drepper@redhat.com>
3  * Copyright (c) 2004 David S. Miller <davem@nuts.davemloft.net>
4  * Copyright (c) 2003-2005 Roland McGrath <roland@redhat.com>
5  * Copyright (c) 2007 Jan Kratochvil <jan.kratochvil@redhat.com>
6  * Copyright (c) 2009 Denys Vlasenko <dvlasenk@redhat.com>
7  * Copyright (c) 2009-2010 Andreas Schwab <schwab@linux-m68k.org>
8  * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com>
9  * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org>
10  * Copyright (c) 2016-2018 The strace developers.
11  * All rights reserved.
12  *
13  * SPDX-License-Identifier: LGPL-2.1-or-later
14  */
15
16 #include "defs.h"
17 #include <sys/stat.h>
18 #include "stat.h"
19
20 void
21 print_struct_stat(struct tcb *tcp, const struct strace_stat *const st)
22 {
23         tprints("{");
24         if (!abbrev(tcp)) {
25                 tprints("st_dev=");
26                 print_dev_t(st->dev);
27                 tprintf(", st_ino=%llu, st_mode=", st->ino);
28                 print_symbolic_mode_t(st->mode);
29                 tprintf(", st_nlink=%llu, st_uid=%llu, st_gid=%llu",
30                         st->nlink, st->uid, st->gid);
31                 tprintf(", st_blksize=%llu", st->blksize);
32                 tprintf(", st_blocks=%llu", st->blocks);
33         } else {
34                 tprints("st_mode=");
35                 print_symbolic_mode_t(st->mode);
36         }
37
38         switch (st->mode & S_IFMT) {
39         case S_IFCHR: case S_IFBLK:
40                 tprints(", st_rdev=");
41                 print_dev_t(st->rdev);
42                 break;
43         default:
44                 tprintf(", st_size=%llu", st->size);
45                 break;
46         }
47
48         if (!abbrev(tcp)) {
49 #define PRINT_ST_TIME(field)                                            \
50         do {                                                            \
51                 tprintf(", st_" #field "=%lld", (long long) st->field); \
52                 tprints_comment(sprinttime_nsec(st->field,              \
53                         zero_extend_signed_to_ull(st->field ## _nsec)));\
54                 if (st->has_nsec)                                       \
55                         tprintf(", st_" #field "_nsec=%llu",            \
56                                 zero_extend_signed_to_ull(              \
57                                         st->field ## _nsec));           \
58         } while (0)
59
60                 PRINT_ST_TIME(atime);
61                 PRINT_ST_TIME(mtime);
62                 PRINT_ST_TIME(ctime);
63         } else {
64                 tprints(", ...");
65         }
66         tprints("}");
67 }