1 /*
2 * Copyright (c) 2015 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2015-2021 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: LGPL-2.1-or-later
7 */
8
9 #include "defs.h"
10
11 SYS_FUNC(sendfile64)
12 {
13 if (entering(tcp)) {
14 /* out_fd */
15 printfd(tcp, tcp->u_arg[0]);
16 tprint_arg_next();
17
18 /* in_fd */
19 printfd(tcp, tcp->u_arg[1]);
20 tprint_arg_next();
21
22 /* offset */
23 if (!printnum_int64(tcp, tcp->u_arg[2], "%" PRIu64)) {
24 tprint_arg_next();
25
26 /* count */
27 PRINT_VAL_U(tcp->u_arg[3]);
28 return RVAL_DECODED;
29 }
30 } else {
31 if (!syserror(tcp) && tcp->u_rval) {
32 tprint_value_changed();
33
34 /* offset */
35 printnum_int64(tcp, tcp->u_arg[2], "%" PRIu64);
36 }
37 tprint_arg_next();
38
39 /* count */
40 PRINT_VAL_U(tcp->u_arg[3]);
41 }
42
43 return 0;
44 }
45
46 SYS_FUNC(sendfile)
47 {
48 if (entering(tcp)) {
49 /* out_fd */
50 printfd(tcp, tcp->u_arg[0]);
51 tprint_arg_next();
52
53 /* in_fd */
54 printfd(tcp, tcp->u_arg[1]);
55 tprint_arg_next();
56
57 /* offset */
58 if (!printnum_ulong(tcp, tcp->u_arg[2])
59 || !tcp->u_arg[3]) {
60 tprint_arg_next();
61
62 /* count */
63 PRINT_VAL_U(tcp->u_arg[3]);
64 return RVAL_DECODED;
65 }
66 } else {
67 if (!syserror(tcp) && tcp->u_rval) {
68 tprint_value_changed();
69
70 /* offset */
71 printnum_ulong(tcp, tcp->u_arg[2]);
72 }
73 tprint_arg_next();
74
75 /* count */
76 PRINT_VAL_U(tcp->u_arg[3]);
77 }
78
79 return 0;
80 }