(root)/
strace-6.5/
src/
fetch_struct_iovec.c
       1  /*
       2   * Copyright (c) The strace developers.
       3   * All rights reserved.
       4   *
       5   * SPDX-License-Identifier: LGPL-2.1-or-later
       6   */
       7  
       8  #include "defs.h"
       9  
      10  #include DEF_MPERS_TYPE(tracee_iovec)
      11  
      12  #include <sys/uio.h>
      13  typedef struct iovec tracee_iovec;
      14  
      15  #include MPERS_DEFS
      16  
      17  #include "iovec.h"
      18  
      19  MPERS_PRINTER_DECL(bool, fetch_struct_iovec, struct tcb *const tcp,
      20  		   const kernel_ulong_t addr, void *const dest)
      21  {
      22  	strace_iovec *p = dest;
      23  	tracee_iovec iov;
      24  
      25  	if (sizeof(*p) == sizeof(iov))
      26  		return tfetch_mem_ignore_syserror(tcp, addr, sizeof(*p), p);
      27  
      28  	if (!tfetch_mem_ignore_syserror(tcp, addr, sizeof(iov), &iov))
      29  		return false;
      30  
      31  	p->iov_base = (unsigned long) iov.iov_base;
      32  	p->iov_len = iov.iov_len;
      33  
      34  	return true;
      35  }