138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/* 238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1999-2003 Ulrich Drepper <drepper@redhat.com> 338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2004 David S. Miller <davem@nuts.davemloft.net> 438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2003-2005 Roland McGrath <roland@redhat.com> 538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2007 Jan Kratochvil <jan.kratochvil@redhat.com> 638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2009 Denys Vlasenko <dvlasenk@redhat.com> 738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2009-2010 Andreas Schwab <schwab@linux-m68k.org> 838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2012 H.J. Lu <hongjiu.lu@intel.com> 9a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * Copyright (c) 2005-2016 Dmitry V. Levin <ldv@altlinux.org> 1039bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2016-2017 The strace developers. 1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * All rights reserved. 1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Redistribution and use in source and binary forms, with or without 1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * modification, are permitted provided that the following conditions 1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * are met: 1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright 1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer. 1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer in the 2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * documentation and/or other materials provided with the distribution. 2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * derived from this software without specific prior written permission. 2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin */ 3538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin 36a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include "defs.h" 37a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include <sys/stat.h> 38a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include "stat.h" 39ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin 40a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levinvoid 41a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levinprint_struct_stat(struct tcb *tcp, const struct strace_stat *const st) 42ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin{ 438d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprints("{"); 44ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin if (!abbrev(tcp)) { 45d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprints("st_dev="); 46d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dev_t(st->dev); 47d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprintf(", st_ino=%llu, st_mode=", st->ino); 48a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin print_symbolic_mode_t(st->mode); 49a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprintf(", st_nlink=%llu, st_uid=%llu, st_gid=%llu", 50a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin st->nlink, st->uid, st->gid); 51a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprintf(", st_blksize=%llu", st->blksize); 52a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprintf(", st_blocks=%llu", st->blocks); 53ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin } else { 548d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprints("st_mode="); 55a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin print_symbolic_mode_t(st->mode); 56ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin } 57ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin 58a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin switch (st->mode & S_IFMT) { 59ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin case S_IFCHR: case S_IFBLK: 60d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprints(", st_rdev="); 61d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dev_t(st->rdev); 62ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin break; 63ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin default: 64a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin tprintf(", st_size=%llu", st->size); 65ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin break; 66ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin } 67ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin 68ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin if (!abbrev(tcp)) { 6939bac055674d23770b9a724221b728e443196ea7Elliott Hughes#define PRINT_ST_TIME(field) \ 7039bac055674d23770b9a724221b728e443196ea7Elliott Hughes do { \ 7139bac055674d23770b9a724221b728e443196ea7Elliott Hughes tprintf(", st_" #field "=%lld", (long long) st->field); \ 7239bac055674d23770b9a724221b728e443196ea7Elliott Hughes tprints_comment(sprinttime_nsec(st->field, \ 7339bac055674d23770b9a724221b728e443196ea7Elliott Hughes zero_extend_signed_to_ull(st->field ## _nsec)));\ 7439bac055674d23770b9a724221b728e443196ea7Elliott Hughes if (st->has_nsec) \ 7539bac055674d23770b9a724221b728e443196ea7Elliott Hughes tprintf(", st_" #field "_nsec=%llu", \ 7639bac055674d23770b9a724221b728e443196ea7Elliott Hughes zero_extend_signed_to_ull( \ 7739bac055674d23770b9a724221b728e443196ea7Elliott Hughes st->field ## _nsec)); \ 7839bac055674d23770b9a724221b728e443196ea7Elliott Hughes } while (0) 7939bac055674d23770b9a724221b728e443196ea7Elliott Hughes 8039bac055674d23770b9a724221b728e443196ea7Elliott Hughes PRINT_ST_TIME(atime); 8139bac055674d23770b9a724221b728e443196ea7Elliott Hughes PRINT_ST_TIME(mtime); 8239bac055674d23770b9a724221b728e443196ea7Elliott Hughes PRINT_ST_TIME(ctime); 83ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin } else { 848d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprints(", ..."); 85ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin } 868d3743868ebce77fe03c5b1ff6435baa8d084293Dmitry V. Levin tprints("}"); 87ab21a9489f9b6cb61d462f8e47c41b507ea8b585Dmitry V. Levin} 88