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