1 /*
2 * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
3 * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
4 * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
5 * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
6 * Copyright (c) 2006-2007 Ulrich Drepper <drepper@redhat.com>
7 * Copyright (c) 2006 Bernhard Kaindl <bk@suse.de>
8 * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@strace.io>
9 * Copyright (c) 2014-2021 The strace developers.
10 * All rights reserved.
11 *
12 * SPDX-License-Identifier: LGPL-2.1-or-later
13 */
14
15 #include "defs.h"
16
17 SYS_FUNC(utimes)
18 {
19 /* pathname */
20 printpath(tcp, tcp->u_arg[0]);
21 tprint_arg_next();
22
23 /* times */
24 print_timeval_utimes(tcp, tcp->u_arg[1]);
25
26 return RVAL_DECODED;
27 }
28
29 SYS_FUNC(futimesat)
30 {
31 /* dirfd */
32 print_dirfd(tcp, tcp->u_arg[0]);
33 tprint_arg_next();
34
35 /* pathname */
36 printpath(tcp, tcp->u_arg[1]);
37 tprint_arg_next();
38
39 /* times */
40 print_timeval_utimes(tcp, tcp->u_arg[2]);
41
42 return RVAL_DECODED;
43 }
44
45 static int
46 do_utimensat(struct tcb *const tcp, const print_obj_by_addr_fn print_ts)
47 {
48 /* dirfd */
49 print_dirfd(tcp, tcp->u_arg[0]);
50 tprint_arg_next();
51
52 /* pathname */
53 printpath(tcp, tcp->u_arg[1]);
54 tprint_arg_next();
55
56 /* times */
57 print_ts(tcp, tcp->u_arg[2]);
58 tprint_arg_next();
59
60 /* flags */
61 printflags(at_flags, tcp->u_arg[3], "AT_???");
62
63 return RVAL_DECODED;
64 }
65
66 #if HAVE_ARCH_TIME32_SYSCALLS
67 SYS_FUNC(utimensat_time32)
68 {
69 return do_utimensat(tcp, print_timespec32_utime_pair);
70 }
71 #endif
72
73 SYS_FUNC(utimensat_time64)
74 {
75 return do_utimensat(tcp, print_timespec64_utime_pair);
76 }
77
78 #ifdef ALPHA
79 SYS_FUNC(osf_utimes)
80 {
81 /* pathname */
82 printpath(tcp, tcp->u_arg[0]);
83 tprint_arg_next();
84
85 /* times */
86 print_timeval32_utimes(tcp, tcp->u_arg[1]);
87
88 return RVAL_DECODED;
89 }
90 #endif /* ALPHA */