io.c revision 4dc8a2aec63e4fb5ee2688544c4de323ed5de3ef
176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman/* 276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com> 54dc8a2aec63e4fb5ee2688544c4de323ed5de3efWichert Akkerman * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl> 676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * All rights reserved. 776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * Redistribution and use in source and binary forms, with or without 976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * modification, are permitted provided that the following conditions 1076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * are met: 1176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1. Redistributions of source code must retain the above copyright 1276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer. 1376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 2. Redistributions in binary form must reproduce the above copyright 1476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * notice, this list of conditions and the following disclaimer in the 1576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * documentation and/or other materials provided with the distribution. 1676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3. The name of the author may not be used to endorse or promote products 1776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * derived from this software without specific prior written permission. 1876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 1976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * 3076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman * $Id$ 3176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman */ 3276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include "defs.h" 3476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <fcntl.h> 3676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#include <sys/uio.h> 3776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 3876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 3976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_read(tcp) 4076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 4176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 4276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 4376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 4476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 4576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 4676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 4776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 4876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 4976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 5076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 5176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 5276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 5376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 5476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 5576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_write(tcp) 5676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 5776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 5876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 5976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 6076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 6176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 6276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 6376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 6476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 6576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 6676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 6776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_readv(tcp) 6876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 6976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 7076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct iovec *iov; 7176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i, len; 7276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 7376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 7476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 7576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 7676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) { 7776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx, %lu", 7876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tcp->u_arg[1], tcp->u_arg[2]); 7976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 8076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 8176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman len = tcp->u_arg[2]; 8276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if ((iov = (struct iovec *) malloc(len * sizeof *iov)) == NULL) { 8376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman fprintf(stderr, "No memory"); 8476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 8576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 8676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umoven(tcp, tcp->u_arg[1], 8776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman len * sizeof *iov, (char *) iov) < 0) { 8876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 8976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 9076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("["); 9176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 0; i < len; i++) { 9276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (i) 9376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 9476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{"); 9576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, (long) iov[i].iov_base, 9676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman iov[i].iov_len); 972e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu}", (unsigned long)iov[i].iov_len); 9876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 9976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 10076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 10176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman free((char *) iov); 10276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 10376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 10476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 10576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 10676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 10776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 10876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_writev(tcp) 10976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 11076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 11176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman struct iovec *iov; 11276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman int i, len; 11376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 11476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 11576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 11676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman len = tcp->u_arg[2]; 11776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman iov = (struct iovec *) malloc(len * sizeof *iov); 11876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (iov == NULL) { 11976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman fprintf(stderr, "No memory"); 12076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 12176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 12276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (umoven(tcp, tcp->u_arg[1], 12376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman len * sizeof *iov, (char *) iov) < 0) { 12476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 12576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 12676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("["); 12776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman for (i = 0; i < len; i++) { 12876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (i) 12976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", "); 13076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("{"); 13176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, (long) iov[i].iov_base, 13276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman iov[i].iov_len); 1332e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu}", (unsigned long)iov[i].iov_len); 13476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 13576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("]"); 13676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 13776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman free((char *) iov); 13876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu", tcp->u_arg[2]); 13976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 14076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 14176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 14276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 14376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef SVR4 14476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 14576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 14676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_pread(tcp) 14776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 14876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 14976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 15076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 15176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 15276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 15376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 15476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 15576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 1569ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#if UNIXWARE 1579ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman /* off_t is signed int */ 1589ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman tprintf(", %lu, %ld", tcp->u_arg[2], tcp->u_arg[3]); 1599ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#else 16076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, %llu", tcp->u_arg[2], 16176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (((unsigned long long) tcp->u_arg[4]) << 32 16276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman | tcp->u_arg[3])); 1639ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 16476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 16576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 16676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 16776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 16876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 16976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_pwrite(tcp) 17076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 17176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 17276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 17376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 17476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 1759ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#if UNIXWARE 1769ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman /* off_t is signed int */ 1779ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman tprintf(", %lu, %ld", tcp->u_arg[2], tcp->u_arg[3]); 1789ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#else 17976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %lu, %llu", tcp->u_arg[2], 18076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman (((unsigned long long) tcp->u_arg[4]) << 32 18176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman | tcp->u_arg[3])); 1829ce1a63eb20b069607c06f9645ac5a17b418a5f3Wichert Akkerman#endif 18376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 18476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 18576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 18676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* SVR4 */ 18776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 18876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#ifdef LINUX 18976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 19076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_pread(tcp) 19176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 19276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 19376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 19476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 19576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } else { 19676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (syserror(tcp)) 19776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 19876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 19976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_rval); 2002e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu, %llu", tcp->u_arg[2], 2012e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman *(unsigned long long *)&tcp->u_arg[3]); 20276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 20376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 20476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 20576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 20676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 20776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_pwrite(tcp) 20876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 20976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 21076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 21176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 21276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); 2132e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu, %llu", tcp->u_arg[2], 2142e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman *(unsigned long long *)&tcp->u_arg[3]); 2152e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman } 2162e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman return 0; 2172e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman} 2182e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 2192e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkermanint 2202e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkermansys_sendfile(tcp) 2212e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkermanstruct tcb *tcp; 2222e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman{ 2232e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman if (entering(tcp)) { 2242e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman off_t offset; 2252e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman 2262e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]); 2272e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman if (!tcp->u_arg[2]) 2282e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("NULL"); 2292e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman else if (umove(tcp, tcp->u_arg[2], &offset) < 0) 2302e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("%#lx", tcp->u_arg[2]); 2312e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman else 2322e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf("[%lu]", offset); 2332e2553a534f532a1546ea2b2f3dc3cd2276d020dWichert Akkerman tprintf(", %lu", tcp->u_arg[3]); 23476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 23576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 23676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 23776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 23876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman#endif /* LINUX */ 23976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 24076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanint 24176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermansys_ioctl(tcp) 24276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkermanstruct tcb *tcp; 24376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman{ 24476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman char *symbol; 24576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman 24676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (entering(tcp)) { 24776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%ld, ", tcp->u_arg[0]); 24876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman symbol = ioctl_lookup(tcp->u_arg[1]); 24976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (symbol) 25076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%s", symbol); 25176baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else 25276baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf("%#lx", tcp->u_arg[1]); 25376baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]); 25476baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 25576baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman else { 25676baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman if (ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]) == 0) 25776baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman tprintf(", %#lx", tcp->u_arg[2]); 25876baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman } 25976baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman return 0; 26076baf7c9f6dd61a15524ad43c1b690c252cf5b7Wichert Akkerman} 261