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 }