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