printstr: rename to printstrn, add printstr as a thin wrapper

As about half of all printstr uses cases are invocations with the last
argument set to -1, create a dedicated function for this use case.

* defs.h (printstr): Rename to printstrn.  All callers updated.
(printstr): New static inline function.  All callers updated.
This commit is contained in:
Дмитрий Левин 2016-12-20 16:43:26 +00:00
parent 1cb75579e1
commit a940d1a60f
26 changed files with 63 additions and 57 deletions

2
aio.c
View File

@ -130,7 +130,7 @@ print_iocb(struct tcb *tcp, const struct iocb *cb)
case SUB_COMMON:
if (cb->aio_lio_opcode == 1 && iocb_is_valid(cb)) {
tprints(", str=");
printstr(tcp, cb->aio_buf, cb->aio_nbytes);
printstrn(tcp, cb->aio_buf, cb->aio_nbytes);
} else {
tprintf(", buf=%#" PRIx64, (uint64_t) cb->aio_buf);
}

6
bjm.c
View File

@ -35,7 +35,7 @@
SYS_FUNC(delete_module)
{
printstr(tcp, tcp->u_arg[0], -1);
printstr(tcp, tcp->u_arg[0]);
tprints(", ");
printflags(delete_module_flags, tcp->u_arg[1], "O_???");
@ -46,7 +46,7 @@ SYS_FUNC(init_module)
{
printaddr_klu(getarg_klu(tcp, 0));
tprintf(", %" PRI_klu ", ", getarg_klu(tcp, 1));
printstr(tcp, tcp->u_arg[2], -1);
printstr(tcp, tcp->u_arg[2]);
return RVAL_DECODED;
}
@ -59,7 +59,7 @@ SYS_FUNC(finit_module)
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
/* param_values */
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
tprints(", ");
/* flags */
printflags(module_init_flags, tcp->u_arg[2], "MODULE_INIT_???");

2
bpf.c
View File

@ -170,7 +170,7 @@ bpf_prog_load(struct tcb *const tcp, const kernel_ureg_t addr,
printxval(bpf_prog_types, attr.prog_type, "BPF_PROG_TYPE_???");
tprintf(", insn_cnt=%u, insns=%#" PRIx64 ", license=",
attr.insn_cnt, attr.insns);
printstr(tcp, attr.license, -1);
printstr(tcp, attr.license);
tprintf(", log_level=%u, log_size=%u, log_buf=%#" PRIx64 ", kern_version=%u}",
attr.log_level, attr.log_size, attr.log_buf, attr.kern_version);

8
defs.h
View File

@ -765,11 +765,17 @@ printaddr(kernel_ureg_t addr)
}
static inline void
printstr(struct tcb *tcp, kernel_ureg_t addr, long len)
printstrn(struct tcb *tcp, kernel_ureg_t addr, long len)
{
printstr_ex(tcp, addr, len, 0);
}
static inline void
printstr(struct tcb *tcp, kernel_ureg_t addr)
{
printstr_ex(tcp, addr, -1, QUOTE_0_TERMINATED);
}
static inline int
printflags(const struct xlat *x, unsigned int flags, const char *dflt)
{

View File

@ -438,7 +438,7 @@ evdev_read_ioctl(struct tcb *const tcp, const unsigned int code,
if (syserror(tcp))
printaddr(arg);
else
printstr(tcp, arg, tcp->u_rval);
printstrn(tcp, arg, tcp->u_rval);
return 1;
# ifdef EVIOCGPROP
case _IOC_NR(EVIOCGPROP(0)):

View File

@ -70,7 +70,7 @@ printargv(struct tcb *const tcp, kernel_ureg_t addr)
break;
}
tprints(sep);
printstr(tcp, wordsize < sizeof(cp.p64) ? cp.p32 : cp.p64, -1);
printstr(tcp, wordsize < sizeof(cp.p64) ? cp.p32 : cp.p64);
}
tprints("]");
}

View File

@ -7,7 +7,7 @@ SYS_FUNC(getrandom)
if (syserror(tcp))
printaddr(tcp->u_arg[0]);
else
printstr(tcp, tcp->u_arg[0], tcp->u_rval);
printstrn(tcp, tcp->u_arg[0], tcp->u_rval);
tprintf(", %lu, ", tcp->u_arg[1]);
printflags(getrandom_flags, tcp->u_arg[2], "GRND_???");
}

View File

@ -2,7 +2,7 @@
SYS_FUNC(sethostname)
{
printstr(tcp, tcp->u_arg[0], tcp->u_arg[1]);
printstrn(tcp, tcp->u_arg[0], tcp->u_arg[1]);
tprintf(", %lu", tcp->u_arg[1]);
return RVAL_DECODED;
@ -15,7 +15,7 @@ SYS_FUNC(gethostname)
if (syserror(tcp))
printaddr(tcp->u_arg[0]);
else
printstr(tcp, tcp->u_arg[0], -1);
printstr(tcp, tcp->u_arg[0]);
tprintf(", %lu", tcp->u_arg[1]);
}
return 0;

10
io.c
View File

@ -41,7 +41,7 @@ SYS_FUNC(read)
if (syserror(tcp))
printaddr(tcp->u_arg[1]);
else
printstr(tcp, tcp->u_arg[1], tcp->u_rval);
printstrn(tcp, tcp->u_arg[1], tcp->u_rval);
tprintf(", %lu", tcp->u_arg[2]);
}
return 0;
@ -51,7 +51,7 @@ SYS_FUNC(write)
{
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
printstrn(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %lu", tcp->u_arg[2]);
return RVAL_DECODED;
@ -87,7 +87,7 @@ print_iovec(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
len = c->data_size;
if (c->data_size != -1UL)
c->data_size -= len;
printstr(tcp, iov[0], len);
printstrn(tcp, iov[0], len);
break;
case IOV_DECODE_NETLINK:
if (len > c->data_size)
@ -156,7 +156,7 @@ SYS_FUNC(pread)
if (syserror(tcp))
printaddr(tcp->u_arg[1]);
else
printstr(tcp, tcp->u_arg[1], tcp->u_rval);
printstrn(tcp, tcp->u_arg[1], tcp->u_rval);
tprintf(", %lu, ", tcp->u_arg[2]);
printllval(tcp, "%lld", 3);
}
@ -167,7 +167,7 @@ SYS_FUNC(pwrite)
{
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
printstrn(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %lu, ", tcp->u_arg[2]);
printllval(tcp, "%lld", 3);

View File

@ -113,7 +113,7 @@ SYS_FUNC(kexec_file_load)
/* cmdline_len */
tprintf("%" PRI_klu ", ", getarg_klu(tcp, 2));
/* cmdline */
printstr(tcp, tcp->u_arg[3], tcp->u_arg[2]);
printstrn(tcp, tcp->u_arg[3], tcp->u_arg[2]);
tprints(", ");
/* flags */
printflags64(kexec_file_load_flags, getarg_klu(tcp, 4), "KEXEC_FILE_???");

View File

@ -51,13 +51,13 @@ print_keyring_serial_number(key_serial_t id)
SYS_FUNC(add_key)
{
/* type */
printstr(tcp, tcp->u_arg[0], -1);
printstr(tcp, tcp->u_arg[0]);
/* description */
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
/* payload */
tprints(", ");
printstr(tcp, tcp->u_arg[2], tcp->u_arg[3]);
printstrn(tcp, tcp->u_arg[2], tcp->u_arg[3]);
/* payload length */
tprintf(", %lu, ", tcp->u_arg[3]);
/* keyring serial number */
@ -69,13 +69,13 @@ SYS_FUNC(add_key)
SYS_FUNC(request_key)
{
/* type */
printstr(tcp, tcp->u_arg[0], -1);
printstr(tcp, tcp->u_arg[0]);
/* description */
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
/* callout_info */
tprints(", ");
printstr(tcp, tcp->u_arg[2], -1);
printstr(tcp, tcp->u_arg[2]);
/* keyring serial number */
tprints(", ");
print_keyring_serial_number(tcp->u_arg[3]);
@ -96,7 +96,7 @@ keyctl_update_key(struct tcb *tcp, key_serial_t id, kernel_ulong_t addr,
{
print_keyring_serial_number(id);
tprints(", ");
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
tprintf(", %llu", zero_extend_signed_to_ull(len));
}
@ -135,9 +135,9 @@ keyctl_keyring_search(struct tcb *tcp, key_serial_t id1, kernel_ulong_t addr1,
{
print_keyring_serial_number(id1);
tprints(", ");
printstr(tcp, addr1, -1);
printstr(tcp, addr1);
tprints(", ");
printstr(tcp, addr2, -1);
printstr(tcp, addr2);
tprints(", ");
print_keyring_serial_number(id2);
}
@ -157,7 +157,7 @@ keyctl_instantiate_key(struct tcb *tcp, key_serial_t id1, kernel_ulong_t addr,
{
print_keyring_serial_number(id1);
tprints(", ");
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
tprintf(", %llu, ", zero_extend_signed_to_ull(len));
print_keyring_serial_number(id2);
}
@ -256,7 +256,7 @@ keyctl_dh_compute(struct tcb *tcp, kernel_ulong_t params, kernel_ulong_t buf,
kernel_ulong_t rval = (tcp->u_rval >= 0) &&
((kernel_ulong_t) tcp->u_rval > len) ? len :
(kernel_ulong_t) tcp->u_rval;
printstr(tcp, buf, rval);
printstrn(tcp, buf, rval);
}
tprintf(", %llu", zero_extend_signed_to_ull(len));
}
@ -290,7 +290,7 @@ SYS_FUNC(keyctl)
break;
case KEYCTL_JOIN_SESSION_KEYRING:
printstr(tcp, arg2, -1);
printstr(tcp, arg2);
break;
case KEYCTL_UPDATE:

View File

@ -40,7 +40,7 @@ SYS_FUNC(lookup_dcookie)
if (syserror(tcp))
printaddr(tcp->u_arg[argn]);
else
printstr(tcp, tcp->u_arg[argn], tcp->u_rval);
printstrn(tcp, tcp->u_arg[argn], tcp->u_rval);
/* len */
tprintf(", %" PRI_klu, getarg_klu(tcp, argn + 1));

View File

@ -31,7 +31,7 @@
SYS_FUNC(memfd_create)
{
printstr(tcp, tcp->u_arg[0], -1);
printstr(tcp, tcp->u_arg[0]);
tprints(", ");
printflags(memfd_create_flags, tcp->u_arg[1], "MFD_???");

View File

@ -65,7 +65,7 @@ SYS_FUNC(mount)
if (ignore_type)
printaddr(tcp->u_arg[2]);
else
printstr(tcp, tcp->u_arg[2], -1);
printstr(tcp, tcp->u_arg[2]);
tprints(", ");
if (old_magic) {
@ -80,7 +80,7 @@ SYS_FUNC(mount)
if (ignore_data)
printaddr(tcp->u_arg[4]);
else
printstr(tcp, tcp->u_arg[4], -1);
printstr(tcp, tcp->u_arg[4]);
return RVAL_DECODED;
}

4
mq.c
View File

@ -48,7 +48,7 @@ SYS_FUNC(mq_open)
SYS_FUNC(mq_timedsend)
{
tprintf("%d, ", (int) tcp->u_arg[0]);
printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
printstrn(tcp, tcp->u_arg[1], tcp->u_arg[2]);
tprintf(", %" PRI_klu ", %u, ", getarg_klu(tcp, 2),
(unsigned int) tcp->u_arg[3]);
print_timespec(tcp, tcp->u_arg[4]);
@ -61,7 +61,7 @@ SYS_FUNC(mq_timedreceive)
tprintf("%d, ", (int) tcp->u_arg[0]);
} else {
if (!syserror(tcp) && (tcp->u_rval >= 0))
printstr(tcp, tcp->u_arg[1], tcp->u_rval);
printstrn(tcp, tcp->u_arg[1], tcp->u_rval);
else
printaddr(tcp->u_arg[1]);
tprintf(", %" PRI_klu ", ", getarg_klu(tcp, 2));

10
net.c
View File

@ -113,7 +113,7 @@ decode_sockbuf(struct tcb *const tcp, const int fd, const kernel_ureg_t addr,
decode_netlink(tcp, addr, addrlen);
break;
default:
printstr(tcp, addr, addrlen);
printstrn(tcp, addr, addrlen);
}
}
@ -605,7 +605,7 @@ print_getsockopt(struct tcb *const tcp, const unsigned int level,
if (len == sizeof(int)) {
printnum_int(tcp, addr, "%d");
} else {
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
}
} else {
printaddr(addr);
@ -642,7 +642,7 @@ print_mreq(struct tcb *const tcp, const kernel_ureg_t addr,
struct ip_mreq mreq;
if (len < sizeof(mreq)) {
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
return;
}
if (umove_or_printaddr(tcp, addr, &mreq))
@ -685,7 +685,7 @@ print_mreq6(struct tcb *const tcp, const kernel_ureg_t addr,
return;
fail:
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
}
#endif /* IPV6_ADD_MEMBERSHIP */
@ -837,7 +837,7 @@ print_setsockopt(struct tcb *const tcp, const unsigned int level,
if (len == sizeof(int)) {
printnum_int(tcp, addr, "%d");
} else {
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
}
} else {
printaddr(addr);

View File

@ -40,7 +40,7 @@ fetch_nlmsghdr(struct tcb *const tcp, struct nlmsghdr *const nlmsghdr,
const kernel_ureg_t addr, const unsigned long len)
{
if (len < sizeof(struct nlmsghdr)) {
printstr(tcp, addr, len);
printstrn(tcp, addr, len);
return false;
}
@ -81,7 +81,7 @@ decode_nlmsghdr_with_payload(struct tcb *const tcp,
if (nlmsg_len > sizeof(struct nlmsghdr)) {
tprints(", ");
printstr(tcp, addr + sizeof(struct nlmsghdr),
printstrn(tcp, addr + sizeof(struct nlmsghdr),
nlmsg_len - sizeof(struct nlmsghdr));
}

View File

@ -252,7 +252,7 @@ SYS_FUNC(prctl)
if (arg2 == PR_SET_VMA_ANON_NAME) {
tprintf(", PR_SET_VMA_ANON_NAME, %#" PRI_klx, arg3);
tprintf(", %" PRI_klu ", ", arg4);
printstr(tcp, arg5, -1);
printstr(tcp, arg5);
} else {
/* There are no other sub-options now, but there
* might be in future... */

View File

@ -45,7 +45,7 @@ MPERS_PRINTER_DECL(void, tprint_msgbuf, struct tcb *const tcp,
if (!umove_or_printaddr(tcp, addr, &msg)) {
tprintf("{%lu, ", (long) msg.mtype);
printstr(tcp, addr + sizeof(msg.mtype), count);
printstrn(tcp, addr + sizeof(msg.mtype), count);
tprints("}");
}
tprintf(", %lu, ", count);

View File

@ -50,7 +50,7 @@ decode_readlink(struct tcb *tcp, int offset)
* "..." continuation based on garbage
* past return buffer's end.
*/
printstr(tcp, tcp->u_arg[offset + 1], tcp->u_rval);
printstrn(tcp, tcp->u_arg[offset + 1], tcp->u_rval);
tprintf(", %lu", tcp->u_arg[offset + 2]);
}
return 0;

View File

@ -17,7 +17,7 @@ SYS_FUNC(reboot)
printflags(bootflags3, cmd, "LINUX_REBOOT_CMD_???");
if (cmd == LINUX_REBOOT_CMD_RESTART2) {
tprints(", ");
printstr(tcp, tcp->u_arg[3], -1);
printstr(tcp, tcp->u_arg[3]);
}
return RVAL_DECODED;
}

2
sock.c
View File

@ -207,7 +207,7 @@ sock_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ureg_t a
case SIOCBRADDBR:
case SIOCBRDELBR:
tprints(", ");
printstr(tcp, arg, -1);
printstr(tcp, arg);
break;
#endif

View File

@ -70,7 +70,7 @@ SYS_FUNC(syslog)
if (syserror(tcp))
printaddr(tcp->u_arg[1]);
else
printstr(tcp, tcp->u_arg[1], tcp->u_rval);
printstrn(tcp, tcp->u_arg[1], tcp->u_rval);
/* len */
tprintf(", %d", (int) tcp->u_arg[2]);

2
term.c
View File

@ -275,7 +275,7 @@ term_ioctl(struct tcb *const tcp, const unsigned int code,
/* ioctls with an indirect parameter displayed as a char */
case TIOCSTI:
tprints(", ");
printstr(tcp, arg, 1);
printstrn(tcp, arg, 1);
break;
/* ioctls with no parameters */

2
v4l2.c
View File

@ -668,7 +668,7 @@ print_v4l2_ext_control(struct tcb *tcp, void *elem_buf, size_t elem_size, void *
tprintf(", size=%u", p->size);
if (p->size > 0) {
tprints(", string=");
printstr(tcp, (kernel_ureg_t) p->string, p->size);
printstrn(tcp, (kernel_ureg_t) p->string, p->size);
} else
# endif
tprintf(", value=%d, value64=%" PRId64, p->value, (int64_t) p->value64);

14
xattr.c
View File

@ -58,7 +58,7 @@ SYS_FUNC(setxattr)
{
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
print_xattr_val(tcp, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
tprints(", ");
printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
@ -69,7 +69,7 @@ SYS_FUNC(fsetxattr)
{
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
print_xattr_val(tcp, tcp->u_arg[2], tcp->u_arg[3], tcp->u_arg[3]);
tprints(", ");
printflags(xattrflags, tcp->u_arg[4], "XATTR_???");
@ -81,7 +81,7 @@ SYS_FUNC(getxattr)
if (entering(tcp)) {
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
} else {
print_xattr_val(tcp, tcp->u_arg[2], tcp->u_arg[3], tcp->u_rval);
}
@ -93,7 +93,7 @@ SYS_FUNC(fgetxattr)
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
} else {
print_xattr_val(tcp, tcp->u_arg[2], tcp->u_arg[3], tcp->u_rval);
}
@ -107,7 +107,7 @@ print_xattr_list(struct tcb *const tcp, const kernel_ureg_t addr,
if (!size || syserror(tcp)) {
printaddr(addr);
} else {
printstr(tcp, addr, tcp->u_rval);
printstrn(tcp, addr, tcp->u_rval);
}
tprintf(", %lu", size);
}
@ -138,7 +138,7 @@ SYS_FUNC(removexattr)
{
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
return RVAL_DECODED;
}
@ -146,6 +146,6 @@ SYS_FUNC(fremovexattr)
{
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printstr(tcp, tcp->u_arg[1], -1);
printstr(tcp, tcp->u_arg[1]);
return RVAL_DECODED;
}