On Fri, Jun 17, 2016 at 04:29:54PM +0000, Fabien Siron wrote: > This commit introduces a new type iov_decoder which will be used instead > of as a decoder parameter. > > * defs.h (iov_decoder): New enum. > (tprint_iov, tprint_iov_upto): Change type of "decode_iov" to enum > iov_decoder. > * aio.c (print_iocb): Change type of "decode_iov" to enum iov_decoder in > tprint_iov() call. > * keyctl.c (keyctl_instantiate_key_iov): Likewise. > * process.c (ptrace): Likewise. > * process_vm.c (process_vm_readv, process_vm_writev): Likewise. > * io.c (writev, do_pwritev, vmsplice): Likewise. > (print_iovec): Replace the condition with a switch. > (tprint_iov_upto): Change type of "decode_iov" to enum iov_decoder. > (readv, do_preadv): Change type of "decode_iov" to enum iov_decoder in > tprint_iov_upto() call. > * scsi.c (print_sg_io_v3_req, print_sg_io_v3_res, print_sg_io_v4_req, > print_sg_io_v4_res): Likewise. > --- > aio.c | 4 +++- > defs.h | 10 ++++++++-- > io.c | 40 ++++++++++++++++++++++++---------------- > keyctl.c | 2 +- > net.c | 3 ++- > process.c | 6 ++++-- > process_vm.c | 10 ++++++---- > scsi.c | 10 ++++++---- > 8 files changed, 54 insertions(+), 31 deletions(-) > > diff --git a/aio.c b/aio.c > index e02af7d..83a29fc 100644 > --- a/aio.c > +++ b/aio.c > @@ -140,7 +140,9 @@ print_iocb(struct tcb *tcp, const struct iocb *cb) > if (iocb_is_valid(cb)) { > tprints(", iovec="); > tprint_iov(tcp, cb->aio_nbytes, cb->aio_buf, > - cb->aio_lio_opcode == 8); > + cb->aio_lio_opcode == 8 > + ? IOV_DECODER_STR > + : IOV_DECODER_ADDR); > } else { > tprintf(", buf=%#" PRIx64 ", nbytes=%" PRIu64, > (uint64_t) cb->aio_buf, > diff --git a/defs.h b/defs.h > index 311fccd..a86c78c 100644 > --- a/defs.h > +++ b/defs.h > @@ -442,6 +442,11 @@ enum sock_proto { > }; > extern enum sock_proto get_proto_by_name(const char *); > > +enum iov_decoder { > + IOV_DECODER_ADDR, > + IOV_DECODER_STR > +};
decoder is an actor, it suits more to a function that does actual decoding. If I was choosing a name of an option, I'd rather use decode. Let's change iov_decoder to iov_decode and IOV_DECODER_* to IOV_DECODE_*. > + > typedef enum { > CFLAG_NONE = 0, > CFLAG_ONLY_STATS, > @@ -659,8 +664,9 @@ extern const char *sprintsigmask_n(const char *, const > void *, unsigned int); > #define tprintsigmask_addr(prefix, mask) \ > tprints(sprintsigmask_n((prefix), (mask), sizeof(mask))) > extern void printsignal(int); > -extern void tprint_iov(struct tcb *, unsigned long, unsigned long, int > decode_iov); > -extern void tprint_iov_upto(struct tcb *, unsigned long, unsigned long, int > decode_iov, unsigned long); > +extern void tprint_iov(struct tcb *, unsigned long, unsigned long, enum > iov_decoder); > +extern void tprint_iov_upto(struct tcb *, unsigned long, unsigned long, > + enum iov_decoder, unsigned long); > extern void tprint_open_modes(unsigned int); > extern const char *sprint_open_modes(unsigned int); > extern void print_seccomp_filter(struct tcb *, unsigned long); > diff --git a/io.c b/io.c > index 87b5f47..ad92d84 100644 > --- a/io.c > +++ b/io.c > @@ -79,14 +79,21 @@ print_iovec(struct tcb *tcp, void *elem_buf, size_t > elem_size, void *data) > > tprints("{"); > > - if (c->decode_iov) { > - unsigned long len = iov[1]; > - if (len > c->data_size) > - len = c->data_size; > - c->data_size -= len; > - printstr(tcp, iov[0], len); > - } else { > - printaddr(iov[0]); > + switch (c->decode_iov) { > + case IOV_DECODER_STR: > + { > + unsigned long len = iov[1]; > + if (len > c->data_size) > + len = c->data_size; > + c->data_size -= len; > + printstr(tcp, iov[0], len); > + break; > + } > + default: > + { > + printaddr(iov[0]); > + break; > + } > } > > tprintf(", %lu}", iov[1]); > @@ -100,7 +107,7 @@ print_iovec(struct tcb *tcp, void *elem_buf, size_t > elem_size, void *data) > */ > void > tprint_iov_upto(struct tcb *tcp, unsigned long len, unsigned long addr, > - int decode_iov, unsigned long data_size) > + enum iov_decoder decode_iov, unsigned long data_size) > { > unsigned long iov[2]; > struct print_iovec_config config = Note that struct print_iovec_config also has to be updated. [...] > --- a/process.c > +++ b/process.c > @@ -201,7 +201,8 @@ SYS_FUNC(ptrace) > print_sigset_addr_len(tcp, data, addr); > break; > case PTRACE_SETREGSET: > - tprint_iov(tcp, /*len:*/ 1, data, /*as string:*/ 0); > + tprint_iov(tcp, /*len:*/ 1, data, > + /*as string:*/ IOV_DECODER_ADDR); Use of IOV_DECODER_ADDR makes this /*as string:*/ comment confusing, let's remove it. > break; > #ifndef IA64 > case PTRACE_PEEKDATA: > @@ -238,7 +239,8 @@ SYS_FUNC(ptrace) > printnum_ulong(tcp, data); > break; > case PTRACE_GETREGSET: > - tprint_iov(tcp, /*len:*/ 1, data, /*as string:*/ 0); > + tprint_iov(tcp, /*len:*/ 1, data, > + /*as string:*/ IOV_DECODER_ADDR); Likewise. -- ldv
pgpkElPHpE_kz.pgp
Description: PGP signature
------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. http://sdm.link/zohomanageengine
_______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel