1a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin/*
2a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
339bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2015-2017 The strace developers.
4a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * All rights reserved.
5a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin *
6a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * Redistribution and use in source and binary forms, with or without
7a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * modification, are permitted provided that the following conditions
8a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * are met:
9a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright
10a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin *    notice, this list of conditions and the following disclaimer.
11a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright
12a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin *    notice, this list of conditions and the following disclaimer in the
13a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin *    documentation and/or other materials provided with the distribution.
14a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products
15a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin *    derived from this software without specific prior written permission.
16a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin *
17a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin */
28a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin
29a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include "defs.h"
30a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin#include "stat.h"
31a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin
32a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levinstatic void
33d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesdecode_struct_stat64(struct tcb *const tcp, const kernel_ulong_t addr)
34a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{
35a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	struct strace_stat st;
36a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin
37a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	if (fetch_struct_stat64(tcp, addr, &st))
38a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		print_struct_stat(tcp, &st);
39a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin}
40a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin
41a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. LevinSYS_FUNC(stat64)
42a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{
43a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	if (entering(tcp)) {
44a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		printpath(tcp, tcp->u_arg[0]);
45a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		tprints(", ");
46a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	} else {
47a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		decode_struct_stat64(tcp, tcp->u_arg[1]);
48a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	}
49a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	return 0;
50a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin}
51a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin
52a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. LevinSYS_FUNC(fstat64)
53a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{
54a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	if (entering(tcp)) {
55a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		printfd(tcp, tcp->u_arg[0]);
56a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		tprints(", ");
57a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	} else {
58a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		decode_struct_stat64(tcp, tcp->u_arg[1]);
59a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	}
60a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	return 0;
61a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin}
62a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin
63a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. LevinSYS_FUNC(fstatat64)
64a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin{
65a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	if (entering(tcp)) {
66a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		print_dirfd(tcp, tcp->u_arg[0]);
67a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		printpath(tcp, tcp->u_arg[1]);
68a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		tprints(", ");
69a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	} else {
70a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		decode_struct_stat64(tcp, tcp->u_arg[2]);
71a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		tprints(", ");
72a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin		printflags(at_flags, tcp->u_arg[3], "AT_???");
73a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	}
74a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin	return 0;
75a7c4ee41ff52f9971c32203e4112467fdd608250Dmitry V. Levin}
76