(root)/
strace-6.5/
src/
sendfile.c
       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  }