/*
* Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
SYS_FUNC(sendfile64)
{
- printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- printfd(tcp, tcp->u_arg[1]);
- tprints(", ");
- printnum_int64(tcp, tcp->u_arg[2], "%" PRIu64);
- tprintf(", %lu", tcp->u_arg[3]);
+ if (entering(tcp)) {
+ printfd(tcp, tcp->u_arg[0]);
+ tprints(", ");
+ printfd(tcp, tcp->u_arg[1]);
+ tprints(", ");
+ if (!printnum_int64(tcp, tcp->u_arg[2], "%" PRIu64)) {
+ tprintf(", %" PRI_klu, tcp->u_arg[3]);
+ return RVAL_DECODED;
+ }
+ } else {
+ if (!syserror(tcp) && tcp->u_rval) {
+ tprints(" => ");
+ printnum_int64(tcp, tcp->u_arg[2], "%" PRIu64);
+ }
+ tprintf(", %" PRI_klu, tcp->u_arg[3]);
+ }
- return RVAL_DECODED;
+ return 0;
}
SYS_FUNC(sendfile)
{
- printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- printfd(tcp, tcp->u_arg[1]);
- tprints(", ");
- printnum_ulong(tcp, tcp->u_arg[2]);
- tprintf(", %lu", tcp->u_arg[3]);
+ if (entering(tcp)) {
+ printfd(tcp, tcp->u_arg[0]);
+ tprints(", ");
+ printfd(tcp, tcp->u_arg[1]);
+ tprints(", ");
+ if (!printnum_ulong(tcp, tcp->u_arg[2])
+ || !tcp->u_arg[3]) {
+ tprintf(", %" PRI_klu, tcp->u_arg[3]);
+ return RVAL_DECODED;
+ }
+ } else {
+ if (!syserror(tcp) && tcp->u_rval) {
+ tprints(" => ");
+ printnum_ulong(tcp, tcp->u_arg[2]);
+ }
+ tprintf(", %" PRI_klu, tcp->u_arg[3]);
+ }
- return RVAL_DECODED;
+ return 0;
}