diff options
68 files changed, 0 insertions, 14340 deletions
| diff --git a/libexec/bootpgw/Makefile b/libexec/bootpgw/Makefile deleted file mode 100644 index a155e0e4f7c32..0000000000000 --- a/libexec/bootpgw/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# Makefile -# $Id$ - -PROG=	bootpgw -NOMAN=  true -SRCS=	bootpgw.c getif.c hwaddr.c report.c rtmsg.c - -SRCDIR=	${.CURDIR}/../bootpd -CFLAGS+=-I${SRCDIR} -.PATH:	${SRCDIR} - -.include <bsd.prog.mk> diff --git a/libexec/bootpgw/bootpgw.c b/libexec/bootpgw/bootpgw.c deleted file mode 100644 index 4e7538bb4defb..0000000000000 --- a/libexec/bootpgw/bootpgw.c +++ /dev/null @@ -1,675 +0,0 @@ -/* - * bootpgw.c - BOOTP GateWay - * This program forwards BOOTP Request packets to a BOOTP server. - */ - -/************************************************************************ -          Copyright 1988, 1991 by Carnegie Mellon University - -                          All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided -that the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Carnegie Mellon University not be used -in advertising or publicity pertaining to distribution of the software -without specific, written prior permission. - -CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. -IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. -************************************************************************/ - -#ifndef lint -static char rcsid[] = "$Id: bootpgw.c,v 1.1.1.1 1994/09/10 14:44:54 csgr Exp $"; -#endif - -/* - * BOOTPGW is typically used to forward BOOTP client requests from - * one subnet to a BOOTP server on a different subnet. - */ - -#include <sys/types.h> -#include <sys/param.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <sys/file.h> -#include <sys/time.h> -#include <sys/stat.h> - -#include <net/if.h> -#include <netinet/in.h> -#include <arpa/inet.h>			/* inet_ntoa */ - -#ifndef	NO_UNISTD -#include <unistd.h> -#endif -#include <stdlib.h> -#include <signal.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <ctype.h> -#include <netdb.h> -#include <syslog.h> -#include <assert.h> - -#ifdef	NO_SETSID -# include <fcntl.h>		/* for O_RDONLY, etc */ -#endif - -#ifndef	USE_BFUNCS -# include <memory.h> -/* Yes, memcpy is OK here (no overlapped copies). */ -# define bcopy(a,b,c)    memcpy(b,a,c) -# define bzero(p,l)      memset(p,0,l) -# define bcmp(a,b,c)     memcmp(a,b,c) -#endif - -#include "bootp.h" -#include "getif.h" -#include "hwaddr.h" -#include "report.h" -#include "patchlevel.h" - -/* Local definitions: */ -#define MAX_MSG_SIZE			(3*512)	/* Maximum packet size */ -#define TRUE 1 -#define FALSE 0 -#define get_network_errmsg get_errmsg - - - -/* - * Externals, forward declarations, and global variables - */ - -#ifdef	__STDC__ -#define P(args) args -#else -#define P(args) () -#endif - -static void usage P((void)); -static void handle_reply P((void)); -static void handle_request P((void)); - -#undef	P - -/* - * IP port numbers for client and server obtained from /etc/services - */ - -u_short bootps_port, bootpc_port; - - -/* - * Internet socket and interface config structures - */ - -struct sockaddr_in bind_addr;	/* Listening */ -struct sockaddr_in recv_addr;	/* Packet source */ -struct sockaddr_in send_addr;	/*  destination */ - - -/* - * option defaults - */ -int debug = 0;					/* Debugging flag (level) */ -struct timeval actualtimeout = -{								/* fifteen minutes */ -	15 * 60L,					/* tv_sec */ -	0							/* tv_usec */ -}; -u_int maxhops = 4;				/* Number of hops allowed for requests. */ -u_int minwait = 3;				/* Number of seconds client must wait before -						   its bootrequest packets are forwarded. */ - -/* - * General - */ - -int s;							/* Socket file descriptor */ -char *pktbuf;					/* Receive packet buffer */ -int pktlen; -char *progname; -char *servername; -int32 server_ipa;				/* Real server IP address, network order. */ - -char myhostname[64]; -struct in_addr my_ip_addr; - - - - -/* - * Initialization such as command-line processing is done and then the - * main server loop is started. - */ - -void -main(argc, argv) -	int argc; -	char **argv; -{ -	struct timeval *timeout; -	struct bootp *bp; -	struct servent *servp; -	struct hostent *hep; -	char *stmp; -	int n, ba_len, ra_len; -	int nfound, readfds; -	int standalone; - -	progname = strrchr(argv[0], '/'); -	if (progname) progname++; -	else progname = argv[0]; - -	/* -	 * Initialize logging. -	 */ -	report_init(0);				/* uses progname */ - -	/* -	 * Log startup -	 */ -	report(LOG_INFO, "version %s.%d", VERSION, PATCHLEVEL); - -	/* Debugging for compilers with struct padding. */ -	assert(sizeof(struct bootp) == BP_MINPKTSZ); - -	/* Get space for receiving packets and composing replies. */ -	pktbuf = malloc(MAX_MSG_SIZE); -	if (!pktbuf) { -		report(LOG_ERR, "malloc failed"); -		exit(1); -	} -	bp = (struct bootp *) pktbuf; - -	/* -	 * Check to see if a socket was passed to us from inetd. -	 * -	 * Use getsockname() to determine if descriptor 0 is indeed a socket -	 * (and thus we are probably a child of inetd) or if it is instead -	 * something else and we are running standalone. -	 */ -	s = 0; -	ba_len = sizeof(bind_addr); -	bzero((char *) &bind_addr, ba_len); -	errno = 0; -	standalone = TRUE; -	if (getsockname(s, (struct sockaddr *) &bind_addr, &ba_len) == 0) { -		/* -		 * Descriptor 0 is a socket.  Assume we are a child of inetd. -		 */ -		if (bind_addr.sin_family == AF_INET) { -			standalone = FALSE; -			bootps_port = ntohs(bind_addr.sin_port); -		} else { -			/* Some other type of socket? */ -			report(LOG_INFO, "getsockname: not an INET socket"); -		} -	} -	/* -	 * Set defaults that might be changed by option switches. -	 */ -	stmp = NULL; -	timeout = &actualtimeout; -	gethostname(myhostname, sizeof(myhostname)); -	hep = gethostbyname(myhostname); -	if (!hep) { -		printf("Can not get my IP address\n"); -		exit(1); -	} -	bcopy(hep->h_addr, (char *)&my_ip_addr, sizeof(my_ip_addr)); - -	/* -	 * Read switches. -	 */ -	for (argc--, argv++; argc > 0; argc--, argv++) { -		if (argv[0][0] != '-') -			break; -		switch (argv[0][1]) { - -		case 'd':				/* debug level */ -			if (argv[0][2]) { -				stmp = &(argv[0][2]); -			} else if (argv[1] && argv[1][0] == '-') { -				/* -				 * Backwards-compatible behavior: -				 * no parameter, so just increment the debug flag. -				 */ -				debug++; -				break; -			} else { -				argc--; -				argv++; -				stmp = argv[0]; -			} -			if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) { -				fprintf(stderr, -						"%s: invalid debug level\n", progname); -				break; -			} -			debug = n; -			break; - -		case 'h':				/* hop count limit */ -			if (argv[0][2]) { -				stmp = &(argv[0][2]); -			} else { -				argc--; -				argv++; -				stmp = argv[0]; -			} -			if (!stmp || (sscanf(stmp, "%d", &n) != 1) || -				(n < 0) || (n > 16)) -			{ -				fprintf(stderr, -						"bootpgw: invalid hop count limit\n"); -				break; -			} -			maxhops = (u_int)n; -			break; - -		case 'i':				/* inetd mode */ -			standalone = FALSE; -			break; - -		case 's':				/* standalone mode */ -			standalone = TRUE; -			break; - -		case 't':				/* timeout */ -			if (argv[0][2]) { -				stmp = &(argv[0][2]); -			} else { -				argc--; -				argv++; -				stmp = argv[0]; -			} -			if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) { -				fprintf(stderr, -						"%s: invalid timeout specification\n", progname); -				break; -			} -			actualtimeout.tv_sec = (int32) (60 * n); -			/* -			 * If the actual timeout is zero, pass a NULL pointer -			 * to select so it blocks indefinitely, otherwise, -			 * point to the actual timeout value. -			 */ -			timeout = (n > 0) ? &actualtimeout : NULL; -			break; - -		case 'w':				/* wait time */ -			if (argv[0][2]) { -				stmp = &(argv[0][2]); -			} else { -				argc--; -				argv++; -				stmp = argv[0]; -			} -			if (!stmp || (sscanf(stmp, "%d", &n) != 1) || -				(n < 0) || (n > 60)) -			{ -				fprintf(stderr, -						"bootpgw: invalid wait time\n"); -				break; -			} -			minwait = (u_int)n; -			break; - -		default: -			fprintf(stderr, "%s: unknown switch: -%c\n", -					progname, argv[0][1]); -			usage(); -			break; - -		} /* switch */ -	} /* for args */ - -	/* Make sure server name argument is suplied. */ -	servername = argv[0]; -	if (!servername) { -		fprintf(stderr, "bootpgw: missing server name\n"); -		usage(); -	} -	/* -	 * Get address of real bootp server. -	 */ -	if (isdigit(servername[0])) -		server_ipa = inet_addr(servername); -	else { -		hep = gethostbyname(servername); -		if (!hep) { -			fprintf(stderr, "bootpgw: can't get addr for %s\n", servername); -			exit(1); -		} -		bcopy(hep->h_addr, (char *)&server_ipa, sizeof(server_ipa)); -	} - -	if (standalone) { -		/* -		 * Go into background and disassociate from controlling terminal. -		 * XXX - This is not the POSIX way (Should use setsid). -gwr -		 */ -		if (debug < 3) { -			if (fork()) -				exit(0); -#ifdef	NO_SETSID -			setpgrp(0,0); -#ifdef TIOCNOTTY -			n = open("/dev/tty", O_RDWR); -			if (n >= 0) { -				ioctl(n, TIOCNOTTY, (char *) 0); -				(void) close(n); -			} -#endif	/* TIOCNOTTY */ -#else	/* SETSID */ -			if (setsid() < 0) -				perror("setsid"); -#endif	/* SETSID */ -		} /* if debug < 3 */ -		/* -		 * Nuke any timeout value -		 */ -		timeout = NULL; - -		/* -		 * Here, bootpd would do: -		 *	chdir -		 *	tzone_init -		 *	rdtab_init -		 *	readtab -		 */ - -		/* -		 * Create a socket. -		 */ -		if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { -			report(LOG_ERR, "socket: %s", get_network_errmsg()); -			exit(1); -		} -		/* -		 * Get server's listening port number -		 */ -		servp = getservbyname("bootps", "udp"); -		if (servp) { -			bootps_port = ntohs((u_short) servp->s_port); -		} else { -			bootps_port = (u_short) IPPORT_BOOTPS; -			report(LOG_ERR, -				   "udp/bootps: unknown service -- assuming port %d", -				   bootps_port); -		} - -		/* -		 * Bind socket to BOOTPS port. -		 */ -		bind_addr.sin_family = AF_INET; -		bind_addr.sin_port = htons(bootps_port); -		bind_addr.sin_addr.s_addr = INADDR_ANY; -		if (bind(s, (struct sockaddr *) &bind_addr, -				 sizeof(bind_addr)) < 0) -		{ -			report(LOG_ERR, "bind: %s", get_network_errmsg()); -			exit(1); -		} -	} /* if standalone */ -	/* -	 * Get destination port number so we can reply to client -	 */ -	servp = getservbyname("bootpc", "udp"); -	if (servp) { -		bootpc_port = ntohs(servp->s_port); -	} else { -		report(LOG_ERR, -			   "udp/bootpc: unknown service -- assuming port %d", -			   IPPORT_BOOTPC); -		bootpc_port = (u_short) IPPORT_BOOTPC; -	} - -	/* no signal catchers */ - -	/* -	 * Process incoming requests. -	 */ -	for (;;) { -		readfds = 1 << s; -		nfound = select(s + 1, (fd_set *)&readfds, NULL, NULL, timeout); -		if (nfound < 0) { -			if (errno != EINTR) { -				report(LOG_ERR, "select: %s", get_errmsg()); -			} -			continue; -		} -		if (!(readfds & (1 << s))) { -			report(LOG_INFO, "exiting after %ld minutes of inactivity", -				   actualtimeout.tv_sec / 60); -			exit(0); -		} -		ra_len = sizeof(recv_addr); -		n = recvfrom(s, pktbuf, MAX_MSG_SIZE, 0, -					 (struct sockaddr *) &recv_addr, &ra_len); -		if (n <= 0) { -			continue; -		} -		if (debug > 3) { -			report(LOG_INFO, "recvd pkt from IP addr %s", -				   inet_ntoa(recv_addr.sin_addr)); -		} -		if (n < sizeof(struct bootp)) { -			if (debug) { -				report(LOG_INFO, "received short packet"); -			} -			continue; -		} -		pktlen = n; - -		switch (bp->bp_op) { -		case BOOTREQUEST: -			handle_request(); -			break; -		case BOOTREPLY: -			handle_reply(); -			break; -		} -	} -} - - - - -/* - * Print "usage" message and exit - */ - -static void -usage() -{ -	fprintf(stderr, -			"usage:  bootpgw [-d level] [-i] [-s] [-t timeout] server\n"); -	fprintf(stderr, "\t -d n\tset debug level\n"); -	fprintf(stderr, "\t -h n\tset max hop count\n"); -	fprintf(stderr, "\t -i\tforce inetd mode (run as child of inetd)\n"); -	fprintf(stderr, "\t -s\tforce standalone mode (run without inetd)\n"); -	fprintf(stderr, "\t -t n\tset inetd exit timeout to n minutes\n"); -	fprintf(stderr, "\t -w n\tset min wait time (secs)\n"); -	exit(1); -} - - - -/* - * Process BOOTREQUEST packet. - * - * Note, this just forwards the request to a real server. - */ -static void -handle_request() -{ -	struct bootp *bp = (struct bootp *) pktbuf; -	struct ifreq *ifr; -	u_short secs, hops; - -	/* XXX - SLIP init: Set bp_ciaddr = recv_addr here? */ - -	if (debug) { -		report(LOG_INFO, "request from %s", -			   inet_ntoa(recv_addr.sin_addr)); -	} -	/* Has the client been waiting long enough? */ -	secs = ntohs(bp->bp_secs); -	if (secs < minwait) -		return; - -	/* Has this packet hopped too many times? */ -	hops = ntohs(bp->bp_hops); -	if (++hops > maxhops) { -		report(LOG_NOTICE, "reqest from %s reached hop limit", -			   inet_ntoa(recv_addr.sin_addr)); -		return; -	} -	bp->bp_hops = htons(hops); - -	/* -	 * Here one might discard a request from the same subnet as the -	 * real server, but we can assume that the real server will send -	 * a reply to the client before it waits for minwait seconds. -	 */ - -	/* If gateway address is not set, put in local interface addr. */ -	if (bp->bp_giaddr.s_addr == 0) { -#if 0	/* BUG */ -		struct sockaddr_in *sip; -		/* -		 * XXX - This picks the wrong interface when the receive addr -		 * is the broadcast address.  There is no  portable way to -		 * find out which interface a broadcast was received on. -gwr -		 * (Thanks to <walker@zk3.dec.com> for finding this bug!) -		 */ -		ifr = getif(s, &recv_addr.sin_addr); -		if (!ifr) { -			report(LOG_NOTICE, "no interface for request from %s", -				   inet_ntoa(recv_addr.sin_addr)); -			return; -		} -		sip = (struct sockaddr_in *) &(ifr->ifr_addr); -		bp->bp_giaddr = sip->sin_addr; -#else	/* BUG */ -		/* -		 * XXX - Just set "giaddr" to our "official" IP address. -		 * RFC 1532 says giaddr MUST be set to the address of the -		 * interface on which the request was received.  Setting -		 * it to our "default" IP address is not strictly correct, -		 * but is good enough to allow the real BOOTP server to -		 * get the reply back here.  Then, before we forward the -		 * reply to the client, the giaddr field is corrected. -		 * (In case the client uses giaddr, which it should not.) -		 * See handle_reply() -		 */ -		bp->bp_giaddr = my_ip_addr; -#endif	/* BUG */ - -		/* -		 * XXX - DHCP says to insert a subnet mask option into the -		 * options area of the request (if vendor magic == std). -		 */ -	} -	/* Set up socket address for send. */ -	send_addr.sin_family = AF_INET; -	send_addr.sin_port = htons(bootps_port); -	send_addr.sin_addr.s_addr = server_ipa; - -	/* Send reply with same size packet as request used. */ -	if (sendto(s, pktbuf, pktlen, 0, -			   (struct sockaddr *) &send_addr, -			   sizeof(send_addr)) < 0) -	{ -		report(LOG_ERR, "sendto: %s", get_network_errmsg()); -	} -} - - - -/* - * Process BOOTREPLY packet. - */ -static void -handle_reply() -{ -	struct bootp *bp = (struct bootp *) pktbuf; -	struct ifreq *ifr; -	struct sockaddr_in *sip; -	u_char canon_haddr[MAXHADDRLEN]; -	unsigned char *ha; -	int len; - -	if (debug) { -		report(LOG_INFO, "   reply for %s", -			   inet_ntoa(bp->bp_yiaddr)); -	} -	/* Make sure client is directly accessible. */ -	ifr = getif(s, &(bp->bp_yiaddr)); -	if (!ifr) { -		report(LOG_NOTICE, "no interface for reply to %s", -			   inet_ntoa(bp->bp_yiaddr)); -		return; -	} -#if 1	/* Experimental (see BUG above) */ -/* #ifdef CATER_TO_OLD_CLIENTS ? */ -	/* -	 * The giaddr field has been set to our "default" IP address -	 * which might not be on the same interface as the client. -	 * In case the client looks at giaddr, (which it should not) -	 * giaddr is now set to the address of the correct interface. -	 */ -	sip = (struct sockaddr_in *) &(ifr->ifr_addr); -	bp->bp_giaddr = sip->sin_addr; -#endif - -	/* Set up socket address for send to client. */ -	send_addr.sin_family = AF_INET; -	send_addr.sin_addr = bp->bp_yiaddr; -	send_addr.sin_port = htons(bootpc_port); - -	/* Create an ARP cache entry for the client. */ -	ha = bp->bp_chaddr; -	len = bp->bp_hlen; -	if (len > MAXHADDRLEN) -		len = MAXHADDRLEN; -	if (bp->bp_htype == HTYPE_IEEE802) { -		haddr_conv802(ha, canon_haddr, len); -		ha = canon_haddr; -	} -	if (debug > 1) -		report(LOG_INFO, "setarp %s - %s", -			   inet_ntoa(bp->bp_yiaddr), haddrtoa(ha, len)); -	setarp(s, &bp->bp_yiaddr, ha, len); - -	/* Send reply with same size packet as request used. */ -	if (sendto(s, pktbuf, pktlen, 0, -			   (struct sockaddr *) &send_addr, -			   sizeof(send_addr)) < 0) -	{ -		report(LOG_ERR, "sendto: %s", get_network_errmsg()); -	} -} - -/* - * Local Variables: - * tab-width: 4 - * c-indent-level: 4 - * c-argdecl-indent: 4 - * c-continued-statement-offset: 4 - * c-continued-brace-offset: -4 - * c-label-offset: -4 - * c-brace-offset: 0 - * End: - */ diff --git a/libexec/rpc.rquotad/Makefile b/libexec/rpc.rquotad/Makefile deleted file mode 100644 index 7618d98f4a485..0000000000000 --- a/libexec/rpc.rquotad/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -#	$Id: Makefile,v 1.3 1995/04/12 00:47:27 jtc Exp $ - -PROG =	rpc.rquotad -SRCS =	rquotad.c -MAN8  =	rpc.rquotad.8 - -DPADD=	${LIBRPCSVC} -LDADD=	-lrpcsvc - -.include <bsd.prog.mk> diff --git a/libexec/rpc.rquotad/rpc.rquotad.8 b/libexec/rpc.rquotad/rpc.rquotad.8 deleted file mode 100644 index b378cc33f47da..0000000000000 --- a/libexec/rpc.rquotad/rpc.rquotad.8 +++ /dev/null @@ -1,58 +0,0 @@ -.\"  -.\" Copyright (c) 1994 Theo de Raadt -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\"    notice, this list of conditions and the following disclaimer in the -.\"    documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\"    must display the following acknowledgement: -.\"	This product includes software developed by Theo de Raadt. -.\" 4. The name of the author may not be used to endorse or promote products -.\"    derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\"	$Id: rpc.rquotad.8,v 1.2 1995/04/12 00:47:32 jtc Exp $ -.\" -.Dd June 22, 1994 -.Dt RPC.RQUOTAD 8 -.Os BSD 4.3 -.Sh NAME -.Nm rpc.rquotad  -.Nd remote quota server  -.Sh SYNOPSIS -.Nm /usr/libexec/rpc.rquotad -.Sh DESCRIPTION -.Nm rpc.rquotad -is a -.Xr rpc 3 -server which returns quotas for a user of a local filesystem -which is NFS-mounted onto a remote machine.  -.Xr quota 1 -uses the results to display user quotas for remote filesystems. -.Nm rpc.rquotad -is normally invoked by -.Xr inetd 8 . -.Pp -.Nm rpc.rquotad -uses an RPC protocol defined in -.Pa /usr/include/rpcsvc/rquota.x . -.Sh BUGS -BSD 4.4 and NetBSD support group quotas but the rquota protocol does not. -.Sh SEE ALSO -.Xr quota 1 diff --git a/libexec/rpc.rquotad/rquotad.c b/libexec/rpc.rquotad/rquotad.c deleted file mode 100644 index 33fa420b17f4e..0000000000000 --- a/libexec/rpc.rquotad/rquotad.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * by Manuel Bouyer (bouyer@ensta.fr) - *  - * There is no copyright, you can use it as you want. - */ - -#include <sys/param.h> -#include <sys/types.h> -#include <sys/mount.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/socket.h> -#include <signal.h> - -#include <stdio.h> -#include <fstab.h> -#include <ctype.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <pwd.h> -#include <grp.h> -#include <errno.h> - -#include <syslog.h> -#include <varargs.h> - -#include <ufs/ufs/quota.h> -#include <rpc/rpc.h> -#include <rpc/pmap_clnt.h> -#include <rpcsvc/rquota.h> -#include <arpa/inet.h> - -void rquota_service __P((struct svc_req *request, SVCXPRT *transp)); -void sendquota __P((struct svc_req *request, SVCXPRT *transp)); -void printerr_reply __P((SVCXPRT *transp)); -void initfs __P((void)); -int getfsquota __P((long id, char *path, struct dqblk *dqblk)); -int hasquota __P((struct fstab *fs, char **qfnamep)); - -/* - * structure containing informations about ufs filesystems - * initialised by initfs() - */ -struct fs_stat { -	struct fs_stat *fs_next;	/* next element */ -	char   *fs_file;		/* mount point of the filesystem */ -	char   *qfpathname;		/* pathname of the quota file */ -	dev_t   st_dev;			/* device of the filesystem */ -} fs_stat; -struct fs_stat *fs_begin = NULL; - -int from_inetd = 1; - -void  -cleanup() -{ -	(void) pmap_unset(RQUOTAPROG, RQUOTAVERS); -	exit(0); -} - -int -main(argc, argv) -	int     argc; -	char   *argv[]; -{ -	SVCXPRT *transp; -	int sock = 0; -	int proto = 0; -	struct sockaddr_in from; -	int fromlen; - -	fromlen = sizeof(from); -	if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { -		from_inetd = 0; -		sock = RPC_ANYSOCK; -		proto = IPPROTO_UDP; -	} - -	if (!from_inetd) { -		daemon(0, 0); - -		(void) pmap_unset(RQUOTAPROG, RQUOTAVERS); - -		(void) signal(SIGINT, cleanup); -		(void) signal(SIGTERM, cleanup); -		(void) signal(SIGHUP, cleanup); -	} - -	openlog("rpc.rquotad", LOG_CONS|LOG_PID, LOG_DAEMON); - -	/* create and register the service */ -	transp = svcudp_create(sock); -	if (transp == NULL) { -		syslog(LOG_ERR, "couldn't create udp service."); -		exit(1); -	} -	if (!svc_register(transp, RQUOTAPROG, RQUOTAVERS, rquota_service, proto)) { -		syslog(LOG_ERR, "unable to register (RQUOTAPROG, RQUOTAVERS, %s).", proto?"udp":"(inetd)"); -		exit(1); -	} - -	initfs();		/* init the fs_stat list */ -	svc_run(); -	syslog(LOG_ERR, "svc_run returned"); -	exit(1); -} - -void  -rquota_service(request, transp) -	struct svc_req *request; -	SVCXPRT *transp; -{ -	switch (request->rq_proc) { -	case NULLPROC: -		(void)svc_sendreply(transp, xdr_void, (char *)NULL); -		break; - -	case RQUOTAPROC_GETQUOTA: -	case RQUOTAPROC_GETACTIVEQUOTA: -		sendquota(request, transp); -		break; - -	default: -		svcerr_noproc(transp); -		break; -	} -	if (from_inetd) -		exit(0); -} - -/* read quota for the specified id, and send it */ -void  -sendquota(request, transp) -	struct svc_req *request; -	SVCXPRT *transp; -{ -	struct getquota_args getq_args; -	struct getquota_rslt getq_rslt; -	struct dqblk dqblk; -	struct timeval timev; - -	bzero((char *)&getq_args, sizeof(getq_args)); -	if (!svc_getargs(transp, xdr_getquota_args, (caddr_t)&getq_args)) { -		svcerr_decode(transp); -		return; -	} -	if (request->rq_cred.oa_flavor != AUTH_UNIX) { -		/* bad auth */ -		getq_rslt.status = Q_EPERM; -	} else if (!getfsquota(getq_args.gqa_uid, getq_args.gqa_pathp, &dqblk)) { -		/* failed, return noquota */ -		getq_rslt.status = Q_NOQUOTA; -	} else { -		gettimeofday(&timev, NULL); -		getq_rslt.status = Q_OK; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_active = TRUE; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_bsize = DEV_BSIZE; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_bhardlimit = -		    dqblk.dqb_bhardlimit; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_bsoftlimit = -		    dqblk.dqb_bsoftlimit; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_curblocks = -		    dqblk.dqb_curblocks; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_fhardlimit = -		    dqblk.dqb_ihardlimit; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_fsoftlimit = -		    dqblk.dqb_isoftlimit; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_curfiles = -		    dqblk.dqb_curinodes; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_btimeleft = -		    dqblk.dqb_btime - timev.tv_sec; -		getq_rslt.getquota_rslt_u.gqr_rquota.rq_ftimeleft = -		    dqblk.dqb_itime - timev.tv_sec; -	} -	if (!svc_sendreply(transp, xdr_getquota_rslt, (char *)&getq_rslt)) { -		svcerr_systemerr(transp); -	} -	if (!svc_freeargs(transp, xdr_getquota_args, (caddr_t)&getq_args)) { -		syslog(LOG_ERR, "unable to free arguments"); -		exit(1); -	} -} - -void  -printerr_reply(transp)	/* when a reply to a request failed */ -	SVCXPRT *transp; -{ -	char   *name; -	struct sockaddr_in *caller; -	int     save_errno; - -	save_errno = errno; - -	caller = svc_getcaller(transp); -	name = (char *)inet_ntoa(caller->sin_addr); -	errno = save_errno; -	if (errno == 0) -		syslog(LOG_ERR, "couldn't send reply to %s", name); -	else -		syslog(LOG_ERR, "couldn't send reply to %s: %m", name); -} - -/* initialise the fs_tab list from entries in /etc/fstab */ -void  -initfs() -{ -	struct fs_stat *fs_current = NULL; -	struct fs_stat *fs_next = NULL; -	char *qfpathname; -	struct fstab *fs; -	struct stat st; - -	setfsent(); -	while ((fs = getfsent())) { -		if (strcmp(fs->fs_vfstype, "ufs")) -			continue; -		if (!hasquota(fs, &qfpathname)) -			continue; - -		fs_current = (struct fs_stat *) malloc(sizeof(struct fs_stat)); -		fs_current->fs_next = fs_next;	/* next element */ - -		fs_current->fs_file = malloc(sizeof(char) * (strlen(fs->fs_file) + 1)); -		strcpy(fs_current->fs_file, fs->fs_file); - -		fs_current->qfpathname = malloc(sizeof(char) * (strlen(qfpathname) + 1)); -		strcpy(fs_current->qfpathname, qfpathname); - -		stat(qfpathname, &st); -		fs_current->st_dev = st.st_dev; - -		fs_next = fs_current; -	} -	endfsent(); -	fs_begin = fs_current; -} - -/* - * gets the quotas for id, filesystem path. - * Return 0 if fail, 1 otherwise - */ -int -getfsquota(id, path, dqblk) -	long id; -	char   *path; -	struct dqblk *dqblk; -{ -	struct stat st_path; -	struct fs_stat *fs; -	int	qcmd, fd, ret = 0; - -	if (stat(path, &st_path) < 0) -		return (0); - -	qcmd = QCMD(Q_GETQUOTA, USRQUOTA); - -	for (fs = fs_begin; fs != NULL; fs = fs->fs_next) { -		/* where the devise is the same as path */ -		if (fs->st_dev != st_path.st_dev) -			continue; - -		/* find the specified filesystem. get and return quota */ -		if (quotactl(fs->fs_file, qcmd, id, dqblk) == 0) -			return (1); - -		if ((fd = open(fs->qfpathname, O_RDONLY)) < 0) { -			syslog(LOG_ERR, "open error: %s: %m", fs->qfpathname); -			return (0); -		} -		if (lseek(fd, (off_t)(id * sizeof(struct dqblk)), L_SET) == (off_t)-1) { -			close(fd); -			return (1); -		} -		switch (read(fd, dqblk, sizeof(struct dqblk))) { -		case 0: -			/* -                         * Convert implicit 0 quota (EOF) -                         * into an explicit one (zero'ed dqblk) -                         */ -			bzero((caddr_t) dqblk, sizeof(struct dqblk)); -			ret = 1; -			break; -		case sizeof(struct dqblk):	/* OK */ -			ret = 1; -			break; -		default:	/* ERROR */ -			syslog(LOG_ERR, "read error: %s: %m", fs->qfpathname); -			close(fd); -			return (0); -		} -		close(fd); -	} -	return (ret); -} - -/* - * Check to see if a particular quota is to be enabled. - * Comes from quota.c, NetBSD 0.9 - */ -int -hasquota(fs, qfnamep) -	struct fstab *fs; -	char  **qfnamep; -{ -	static char initname, usrname[100]; -	static char buf[BUFSIZ]; -	char	*opt, *cp; -	char	*qfextension[] = INITQFNAMES; - -	if (!initname) { -		sprintf(usrname, "%s%s", qfextension[USRQUOTA], QUOTAFILENAME); -		initname = 1; -	} -	strcpy(buf, fs->fs_mntops); -	for (opt = strtok(buf, ","); opt; opt = strtok(NULL, ",")) { -		if ((cp = index(opt, '='))) -			*cp++ = '\0'; -		if (strcmp(opt, usrname) == 0) -			break; -	} -	if (!opt) -		return (0); -	if (cp) { -		*qfnamep = cp; -		return (1); -	} -	sprintf(buf, "%s/%s.%s", fs->fs_file, QUOTAFILENAME, qfextension[USRQUOTA]); -	*qfnamep = buf; -	return (1); -} diff --git a/libexec/rpc.sprayd/Makefile b/libexec/rpc.sprayd/Makefile deleted file mode 100644 index e497599a8451b..0000000000000 --- a/libexec/rpc.sprayd/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -#	$Id: Makefile,v 1.3 1995/04/12 00:48:01 jtc Exp $ - -PROG =	rpc.sprayd -SRCS =	sprayd.c -MAN8 =	rpc.sprayd.8 - -DPADD=	${LIBRPCSVC} -LDADD=	-lrpcsvc - -.include <bsd.prog.mk> - diff --git a/libexec/rpc.sprayd/rpc.sprayd.8 b/libexec/rpc.sprayd/rpc.sprayd.8 deleted file mode 100644 index cff47264ca973..0000000000000 --- a/libexec/rpc.sprayd/rpc.sprayd.8 +++ /dev/null @@ -1,54 +0,0 @@ -.\"  -.\" Copyright (c) 1994 Christos Zoulas -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\"    notice, this list of conditions and the following disclaimer in the -.\"    documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\"    must display the following acknowledgement: -.\"	This product includes software developed by Christos Zoulas. -.\" 4. The name of the author may not be used to endorse or promote products -.\"    derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\"	$Id: rpc.sprayd.8,v 1.2 1995/04/12 00:48:03 jtc Exp $ -.\" -.Dd June 22, 1994 -.Dt RPC.SPRAYD 8 -.Os BSD 4.3 -.Sh NAME -.Nm rpc.sprayd  -.Nd spray server -.Sh SYNOPSIS -.Nm /usr/libexec/rpc.sprayd -.Sh DESCRIPTION -.Nm rpc.sprayd -is a server which records packets sent by the -.Xr spray 1 -command and sends a traffic report to the originator of the packets. -The -.Nm rpc.sprayd -daemon is normally invoked by -.Xr inetd 8 . -.Pp -.Nm rpc.sprayd -uses an RPC protocol defined in  -.Pa /usr/include/rpcsvc/spray.x . -.Sh SEE ALSO -.Xr spray 8 diff --git a/libexec/rpc.sprayd/sprayd.c b/libexec/rpc.sprayd/sprayd.c deleted file mode 100644 index 28ae295fad059..0000000000000 --- a/libexec/rpc.sprayd/sprayd.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 1994 Christos Zoulas - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed by Christos Zoulas. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - *	$Id: sprayd.c,v 1.7 1995/03/26 23:36:44 mycroft Exp $ - */ - -#ifndef lint -static char rcsid[] = "$Id: sprayd.c,v 1.7 1995/03/26 23:36:44 mycroft Exp $"; -#endif /* not lint */ - -#include <stdio.h> -#include <stdlib.h> -#include <signal.h> -#include <unistd.h> -#include <rpc/rpc.h> -#include <rpc/pmap_clnt.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <syslog.h> -#include <rpcsvc/spray.h> - -static void spray_service __P((struct svc_req *, SVCXPRT *)); - -static int from_inetd = 1; - -#define	timersub(tvp, uvp, vvp)						\ -	do {								\ -		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\ -		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\ -		if ((vvp)->tv_usec < 0) {				\ -			(vvp)->tv_sec--;				\ -			(vvp)->tv_usec += 1000000;			\ -		}							\ -	} while (0) - -#define TIMEOUT 120 - -void -cleanup() -{ -	(void) pmap_unset(SPRAYPROG, SPRAYVERS); -	exit(0); -} - -void -die() -{ -	exit(0); -} - -int -main(argc, argv) -	int argc; -	char *argv[]; -{ -	SVCXPRT *transp; -	int sock = 0; -	int proto = 0; -	struct sockaddr_in from; -	int fromlen; - -	/* -	 * See if inetd started us -	 */ -	fromlen = sizeof(from); -	if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { -		from_inetd = 0; -		sock = RPC_ANYSOCK; -		proto = IPPROTO_UDP; -	} - -	if (!from_inetd) { -		daemon(0, 0); - -		(void) pmap_unset(SPRAYPROG, SPRAYVERS); - -		(void) signal(SIGINT, cleanup); -		(void) signal(SIGTERM, cleanup); -		(void) signal(SIGHUP, cleanup); -	} else { -		(void) signal(SIGALRM, die); -		alarm(TIMEOUT); -	} - -	openlog("rpc.sprayd", LOG_CONS|LOG_PID, LOG_DAEMON); - -	transp = svcudp_create(sock); -	if (transp == NULL) { -		syslog(LOG_ERR, "cannot create udp service."); -		return 1; -	} -	if (!svc_register(transp, SPRAYPROG, SPRAYVERS, spray_service, proto)) { -		syslog(LOG_ERR, -		    "unable to register (SPRAYPROG, SPRAYVERS, %s).", -		    proto ? "udp" : "(inetd)"); -		return 1; -	} - -	svc_run(); -	syslog(LOG_ERR, "svc_run returned"); -	return 1; -} - - -static void -spray_service(rqstp, transp) -	struct svc_req *rqstp; -	SVCXPRT *transp; -{ -	static spraycumul scum; -	static struct timeval clear, get; - -	switch (rqstp->rq_proc) { -	case SPRAYPROC_CLEAR: -		scum.counter = 0; -		(void) gettimeofday(&clear, 0); -		/*FALLTHROUGH*/ - -	case NULLPROC: -		(void)svc_sendreply(transp, xdr_void, (char *)NULL); -		return; - -	case SPRAYPROC_SPRAY: -		scum.counter++; -		return; - -	case SPRAYPROC_GET: -		(void) gettimeofday(&get, 0); -		timersub(&get, &clear, &get); -		scum.clock.sec = get.tv_sec; -		scum.clock.usec = get.tv_usec; -		break; - -	default: -		svcerr_noproc(transp); -		return; -	} - -	if (!svc_sendreply(transp, xdr_spraycumul, (caddr_t)&scum)) { -		svcerr_systemerr(transp); -		syslog(LOG_ERR, "bad svc_sendreply"); -	} -} diff --git a/sbin/fsdb/Makefile b/sbin/fsdb/Makefile deleted file mode 100644 index 381b81783ad4c..0000000000000 --- a/sbin/fsdb/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -#	$NetBSD: Makefile,v 1.1.1.1 1995/10/08 23:08:36 thorpej Exp $ -#	@(#)Makefile	8.1 (Berkeley) 6/5/93 - -PROG=	fsdb -MAN=	fsdb.8 -SRCS=	fsdb.c fsdbutil.c \ -	dir.c inode.c pass1.c pass1b.c pass2.c pass3.c pass4.c \ -	pass5.c preen.c setup.c utilities.c ffs_subr.c ffs_tables.c -CFLAGS+= -I${.CURDIR}/../../sbin/fsck -LDADD+= -ledit -ltermcap -.PATH:	${.CURDIR}/../../sbin/fsck ${.CURDIR}/../../sys/ufs/ffs - -.include <bsd.prog.mk> diff --git a/sbin/fsdb/fsdb.8 b/sbin/fsdb/fsdb.8 deleted file mode 100644 index a44d191d7a834..0000000000000 --- a/sbin/fsdb/fsdb.8 +++ /dev/null @@ -1,228 +0,0 @@ -.\"	$NetBSD: fsdb.8,v 1.2 1995/10/08 23:18:08 thorpej Exp $ -.\" -.\" Copyright (c) 1995 John T. Kohl -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\"    notice, this list of conditions and the following disclaimer in the -.\"    documentation and/or other materials provided with the distribution. -.\" 3. The name of the author may not be used to endorse or promote products -.\"    derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.Dd September 14, 1995 -.Dt FSDB 8 -.Os NetBSD -.Sh NAME -.Nm fsdb -.Nd FFS debugging/editing tool -.Sh SYNOPSIS -.Nm -.Op Fl d -.Fl f Ar fsname -.Sh DESCRIPTION -.Nm -opens  -.Ar fsname -(usually a raw disk partition) and runs a command loop -allowing manipulation of the file system's inode data.  You are prompted -to enter a command with -.Ic "fsdb (inum X)>" -where -.Va X -is the currently selected i-number.  The initial selected inode is the -root of the filesystem (i-number 2). -The command processor uses the -.Xr libedit 3 -library, so you can use command line editing to reduce typing if desired. -When you exit the command loop, the file system superblock is marked -dirty and any buffered blocks are written to the file system. -.Pp -The -.Fl d -option enables additional debugging output (which comes primarily from -.Xr fsck 8 -derived -code). -.Sh COMMANDS -Besides the built-in  -.Xr libedit 3 -commands, -.Nm -supports these commands: -.Pp -.Bl -tag -width indent -compact -.It Cm help -Print out the list of accepted commands. -.Pp -.It Cm inode Ar i-number -Select inode -.Ar i-number -as the new current inode. -.Pp -.It Cm back -Revert to the previously current inode. -.Pp -.It Cm clri -Clear the current inode. -.Pp -.It Cm lookup Ar name -.It Cm cd Ar name -Find -.Ar name -in the current directory and make its inode the current inode. -.Ar Name -may be a multi-component name or may begin with slash to indicate that -the root inode should be used to start the lookup.  If some component -along the pathname is not found, the last valid directory encountered is -left as the active inode. -.br -This command is valid only if the starting inode is a directory. -.Pp -.It Cm active -.It Cm print -Print out the active inode. -.Pp -.It Cm uplink -Increment the active inode's link count. -.Pp -.It Cm downlink -Decrement the active inode's link count. -.Pp -.It Cm linkcount Ar number -Set the active inode's link count to -.Ar number . -.Pp -.It Cm ls -List the current inode's directory entries.  This command is valid only -if the current inode is a directory.  -.Pp -.It Cm rm Ar name -.It Cm del Ar name -Remove the entry -.Ar name -from the current directory inode.  This command is valid only -if the current inode is a directory. -.Pp -.It Cm ln Ar ino Ar name -Create a link to inode -.Ar ino -under the name -.Ar name -in the current directory inode.  This command is valid only -if the current inode is a directory. -.Pp -.It Cm chinum Ar dirslot Ar inum -Change the i-number in directory entry -.Ar dirslot -to -.Ar inum . -.Pp -.It Cm chname Ar dirslot Ar name -Change the name in directory entry -.Ar dirslot -to -.Ar name . -This command cannot expand a directory entry.  You can only rename an -entry if the name will fit into the existing directory slot. -.Pp -.It Cm chtype Ar type -Change the type of the current inode to -.Ar type . -.Ar type -may be one of: -.Em file , -.Em dir , -.Em socket , -or -.Em fifo . -.Pp -.It Cm chmod Ar mode -Change the mode bits of the current inode to -.Ar mode . -You cannot change the file type with this subcommand; use -.Ic chtype -to do that. -.Pp -.It Cm chflags Ar flags -Change the file flags of the current inode to -.Ar flags . -.Pp -.It Cm chown Ar uid -Change the owner of the current inode to -.Ar uid . -.Pp -.It Cm chgrp Ar gid -Change the group of the current inode to -.Ar gid . -.Pp -.It Cm chgen Ar gen -Change the generation number of the current inode to -.Ar gen . -.Pp -.It Cm mtime Ar time -.It Cm ctime Ar time -.It Cm atime Ar time -Change the modification, change, or access time (respectively) on the -current inode to  -.Ar time . -.Ar Time -should be in the format -.Em YYYYMMDDHHMMSS[.nsec] -where -.Em nsec -is an optional nanosecond specification.  If no nanoseconds are specified, the -.Va mtimensec , -.Va ctimensec , -or -.Va atimensec  -field will be set to zero. -.Pp -.It Cm quit, Cm q, Cm exit, Em <EOF> -Exit the program. -.El -.Sh SEE ALSO -.Xr libedit 3 , -.Xr fs 5 , -.Xr fsck 8 , -.Xr clri 8 . -.Sh BUGS -Manipulation of ``short'' symlinks doesn't work (in particular, don't -try changing a symlink's type). -.br -You must specify modes as numbers rather than symbolic names. -.br -There are a bunch of other things that you might want to do which -.Nm -doesn't implement. -.br -The -.Xr libedit 3 -reference page is not yet written. -.Sh HISTORY -.Nm -uses the source code for -.Xr fsck 8 -to implement most of the file system manipulation code.  The remainder of -.Nm -first appeared in NetBSD. -.Sh WARNING -Use this tool with extreme caution--you can damage an FFS file system -beyond what -.Xr fsck 8 -can repair.  diff --git a/sbin/fsdb/fsdb.c b/sbin/fsdb/fsdb.c deleted file mode 100644 index 8a5ad7b3ddc27..0000000000000 --- a/sbin/fsdb/fsdb.c +++ /dev/null @@ -1,865 +0,0 @@ -/*	$NetBSD: fsdb.c,v 1.2 1995/10/08 23:18:10 thorpej Exp $	*/ - -/* - *  Copyright (c) 1995 John T. Kohl - *  All rights reserved. - *  - *  Redistribution and use in source and binary forms, with or without - *  modification, are permitted provided that the following conditions - *  are met: - *  1. Redistributions of source code must retain the above copyright - *     notice, this list of conditions and the following disclaimer. - *  2. Redistributions in binary form must reproduce the above copyright - *     notice, this list of conditions and the following disclaimer in the - *     documentation and/or other materials provided with the distribution. - *  3. The name of the author may not be used to endorse or promote products - *     derived from this software without specific prior written permission. - *  - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static char rcsid[] = "$NetBSD: fsdb.c,v 1.2 1995/10/08 23:18:10 thorpej Exp $"; -#endif /* not lint */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/param.h> -#include <sys/time.h> -#include <sys/mount.h> -#include <ctype.h> -#include <fcntl.h> -#include <grp.h> -#include <histedit.h> -#include <limits.h> -#include <pwd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include <ufs/ufs/dinode.h> -#include <ufs/ufs/dir.h> -#include <ufs/ffs/fs.h> - -#include "fsdb.h" -#include "fsck.h" - -extern char *__progname;	/* from crt0.o */ - -void usage __P((void)); -int cmdloop __P((void)); - -void  -usage() -{ -	errx(1, "usage: %s [-d] -f <fsname>", __progname); -} - -int returntosingle = 0; - -/* - * We suck in lots of fsck code, and just pick & choose the stuff we want. - * - * fsreadfd is set up to read from the file system, fswritefd to write to - * the file system. - */ -void -main(argc, argv) -	int argc; -	char *argv[]; -{ -	int ch, rval; -	char *fsys = NULL; -	struct stat stb; - -	while (-1 != (ch = getopt(argc, argv, "f:d"))) { -		switch (ch) { -		case 'f': -			fsys = optarg; -			break; -		case 'd': -			debug++; -			break; -		default: -			usage(); -		} -	} -	if (fsys == NULL) -		usage(); -	if (!setup(fsys)) -		errx(1, "cannot set up file system `%s'", fsys); -	printf("Editing file system `%s'\nLast Mounted on %s\n", fsys, -	       sblock.fs_fsmnt); -	rval = cmdloop(); -	sblock.fs_clean = 0;		/* mark it dirty */ -	sbdirty(); -	ckfini(0); -	printf("*** FILE SYSTEM MARKED DIRTY\n"); -	printf("*** BE SURE TO RUN FSCK TO CLEAN UP ANY DAMAGE\n"); -	printf("*** IF IT WAS MOUNTED, RE-MOUNT WITH -u -o reload\n"); -	exit(rval); -} - -#define CMDFUNC(func) int func __P((int argc, char *argv[])) -#define CMDFUNCSTART(func) int func(argc, argv)		\ -				int argc;		\ -				char *argv[]; - -CMDFUNC(helpfn); -CMDFUNC(focus);				/* focus on inode */ -CMDFUNC(active);			/* print active inode */ -CMDFUNC(focusname);			/* focus by name */ -CMDFUNC(zapi);				/* clear inode */ -CMDFUNC(uplink);			/* incr link */ -CMDFUNC(downlink);			/* decr link */ -CMDFUNC(linkcount);			/* set link count */ -CMDFUNC(quit);				/* quit */ -CMDFUNC(ls);				/* list directory */ -CMDFUNC(rm);				/* remove name */ -CMDFUNC(ln);				/* add name */ -CMDFUNC(newtype);			/* change type */ -CMDFUNC(chmode);			/* change mode */ -CMDFUNC(chaflags);			/* change flags */ -CMDFUNC(chgen);				/* change generation */ -CMDFUNC(chowner);			/* change owner */ -CMDFUNC(chgroup);			/* Change group */ -CMDFUNC(back);				/* pop back to last ino */ -CMDFUNC(chmtime);			/* Change mtime */ -CMDFUNC(chctime);			/* Change ctime */ -CMDFUNC(chatime);			/* Change atime */ -CMDFUNC(chinum);			/* Change inode # of dirent */ -CMDFUNC(chname);			/* Change dirname of dirent */ - -struct cmdtable cmds[] = { -	{ "help", "Print out help", 1, 1, helpfn }, -	{ "?", "Print out help", 1, 1, helpfn }, -	{ "inode", "Set active inode to INUM", 2, 2, focus }, -	{ "clri", "Clear inode INUM", 2, 2, zapi }, -	{ "lookup", "Set active inode by looking up NAME", 2, 2, focusname }, -	{ "cd", "Set active inode by looking up NAME", 2, 2, focusname }, -	{ "back", "Go to previous active inode", 1, 1, back }, -	{ "active", "Print active inode", 1, 1, active }, -	{ "print", "Print active inode", 1, 1, active }, -	{ "uplink", "Increment link count", 1, 1, uplink }, -	{ "downlink", "Decrement link count", 1, 1, downlink }, -	{ "linkcount", "Set link count to COUNT", 2, 2, linkcount }, -	{ "ls", "List current inode as directory", 1, 1, ls }, -	{ "rm", "Remove NAME from current inode directory", 2, 2, rm }, -	{ "del", "Remove NAME from current inode directory", 2, 2, rm }, -	{ "ln", "Hardlink INO into current inode directory as NAME", 3, 3, ln }, -	{ "chinum", "Change dir entry number INDEX to INUM", 3, 3, chinum }, -	{ "chname", "Change dir entry number INDEX to NAME", 3, 3, chname }, -	{ "chtype", "Change type of current inode to TYPE", 2, 2, newtype }, -	{ "chmod", "Change mode of current inode to MODE", 2, 2, chmode }, -	{ "chown", "Change owner of current inode to OWNER", 2, 2, chowner }, -	{ "chgrp", "Change group of current inode to GROUP", 2, 2, chgroup }, -	{ "chflags", "Change flags of current inode to FLAGS", 2, 2, chaflags }, -	{ "chgen", "Change generation number of current inode to GEN", 2, 2, chgen }, -	{ "mtime", "Change mtime of current inode to MTIME", 2, 2, chmtime }, -	{ "ctime", "Change ctime of current inode to CTIME", 2, 2, chctime }, -	{ "atime", "Change atime of current inode to ATIME", 2, 2, chatime }, -	{ "quit", "Exit", 1, 1, quit }, -	{ "q", "Exit", 1, 1, quit }, -	{ "exit", "Exit", 1, 1, quit }, -	{ NULL, 0, 0, 0 }, -}; - -int -helpfn(argc, argv) -	int argc; -	char *argv[]; -{ -    register struct cmdtable *cmdtp; - -    printf("Commands are:\n%-10s %5s %5s   %s\n", -	   "command", "min argc", "max argc", "what"); -     -    for (cmdtp = cmds; cmdtp->cmd; cmdtp++) -	printf("%-10s %5u %5u   %s\n", -	       cmdtp->cmd, cmdtp->minargc, cmdtp->maxargc, cmdtp->helptxt); -    return 0; -} - -char * -prompt(el) -	EditLine *el; -{ -    static char pstring[64]; -    snprintf(pstring, sizeof(pstring), "fsdb (inum: %d)> ", curinum); -    return pstring; -} - - -int -cmdloop() -{ -    char *line; -    const char *elline; -    int cmd_argc, rval = 0, known; -#define scratch known -    char **cmd_argv; -    struct cmdtable *cmdp; -    History *hist; -    EditLine *elptr; - -    curinode = ginode(ROOTINO); -    curinum = ROOTINO; -    printactive(); - -    hist = history_init(); -    history(hist, H_EVENT, 100);	/* 100 elt history buffer */ - -    elptr = el_init(__progname, stdin, stdout); -    el_set(elptr, EL_EDITOR, "emacs"); -    el_set(elptr, EL_PROMPT, prompt); -    el_set(elptr, EL_HIST, history, hist); -    el_source(elptr, NULL); - -    while ((elline = el_gets(elptr, &scratch)) != NULL && scratch != 0) { -	if (debug) -	    printf("command `%s'\n", line); - -	history(hist, H_ENTER, elline); - -	line = strdup(elline); -	cmd_argv = crack(line, &cmd_argc); -	/* -	 * el_parse returns -1 to signal that it's not been handled -	 * internally. -	 */ -	if (el_parse(elptr, cmd_argc, cmd_argv) != -1) -	    continue; -	if (cmd_argc) { -	    known = 0; -	    for (cmdp = cmds; cmdp->cmd; cmdp++) { -		if (!strcmp(cmdp->cmd, cmd_argv[0])) { -		    if (cmd_argc >= cmdp->minargc && -			cmd_argc <= cmdp->maxargc) -			rval = (*cmdp->handler)(cmd_argc, cmd_argv); -		    else -			rval = argcount(cmdp, cmd_argc, cmd_argv); -		    known = 1; -		    break; -		} -	    } -	    if (!known) -		warnx("unknown command `%s'", cmd_argv[0]), rval = 1; -	} else -	    rval = 0; -	free(line); -	if (rval < 0) -	    return rval; -	if (rval) -	    warnx("rval was %d", rval); -    } -    el_end(elptr); -    history_end(hist); -    return rval; -} - -struct dinode *curinode; -ino_t curinum, ocurrent; - -#define GETINUM(ac,inum)    inum = strtoul(argv[ac], &cp, 0); \ -    if (inum < ROOTINO || inum > maxino || cp == argv[ac] || *cp != '\0' ) { \ -	printf("inode %d out of range; range is [%d,%d]\n", \ -	       inum, ROOTINO, maxino); \ -	return 1; \ -    } - -/* - * Focus on given inode number - */ -CMDFUNCSTART(focus) -{ -    ino_t inum; -    char *cp; - -    GETINUM(1,inum); -    curinode = ginode(inum); -    ocurrent = curinum; -    curinum = inum; -    printactive(); -    return 0; -} - -CMDFUNCSTART(back) -{ -    curinum = ocurrent; -    curinode = ginode(curinum); -    printactive(); -    return 0; -} - -CMDFUNCSTART(zapi) -{ -    ino_t inum; -    struct dinode *dp; -    char *cp; - -    GETINUM(1,inum); -    dp = ginode(inum); -    clearinode(dp); -    inodirty(); -    if (curinode)			/* re-set after potential change */ -	curinode = ginode(curinum); -    return 0; -} - -CMDFUNCSTART(active) -{ -    printactive(); -    return 0; -} - - -CMDFUNCSTART(quit) -{ -    return -1; -} - -CMDFUNCSTART(uplink) -{ -    if (!checkactive()) -	return 1; -    printf("inode %d link count now %d\n", curinum, ++curinode->di_nlink); -    inodirty(); -    return 0; -} - -CMDFUNCSTART(downlink) -{ -    if (!checkactive()) -	return 1; -    printf("inode %d link count now %d\n", curinum, --curinode->di_nlink); -    inodirty(); -    return 0; -} - -const char *typename[] = { -    "unknown", -    "fifo", -    "char special", -    "unregistered #3", -    "directory", -    "unregistered #5", -    "blk special", -    "unregistered #7", -    "regular", -    "unregistered #9", -    "symlink", -    "unregistered #11", -    "socket", -    "unregistered #13", -    "whiteout", -}; -     -int slot; - -int -scannames(idesc) -	struct inodesc *idesc; -{ -	register struct direct *dirp = idesc->id_dirp; - -	printf("slot %d ino %d reclen %d: %s, `%.*s'\n", -	       slot++, dirp->d_ino, dirp->d_reclen, typename[dirp->d_type], -	       dirp->d_namlen, dirp->d_name); -	return (KEEPON); -} - -CMDFUNCSTART(ls) -{ -    struct inodesc idesc; -    checkactivedir();			/* let it go on anyway */ - -    slot = 0; -    idesc.id_number = curinum; -    idesc.id_func = scannames; -    idesc.id_type = DATA; -    idesc.id_fix = IGNORE; -    ckinode(curinode, &idesc); -    curinode = ginode(curinum); - -    return 0; -} - -int findino __P((struct inodesc *idesc)); /* from fsck */ -static int dolookup __P((char *name)); - -static int -dolookup(name) -	char *name; -{ -    struct inodesc idesc; - -    if (!checkactivedir()) -	    return 0; -    idesc.id_number = curinum; -    idesc.id_func = findino; -    idesc.id_name = name; -    idesc.id_type = DATA; -    idesc.id_fix = IGNORE; -    if (ckinode(curinode, &idesc) & FOUND) { -	curinum = idesc.id_parent; -	curinode = ginode(curinum); -	printactive(); -	return 1; -    } else { -	warnx("name `%s' not found in current inode directory", name); -	return 0; -    } -} - -CMDFUNCSTART(focusname) -{ -    char *p, *val; - -    if (!checkactive()) -	return 1; - -    ocurrent = curinum; -     -    if (argv[1][0] == '/') { -	curinum = ROOTINO; -	curinode = ginode(ROOTINO); -    } else { -	if (!checkactivedir()) -	    return 1; -    } -    for (p = argv[1]; p != NULL;) { -	while ((val = strsep(&p, "/")) != NULL && *val == '\0'); -	if (val) { -	    printf("component `%s': ", val); -	    fflush(stdout); -	    if (!dolookup(val)) { -		curinode = ginode(curinum); -		return(1); -	    } -	} -    } -    return 0; -} - -CMDFUNCSTART(ln) -{ -    ino_t inum; -    struct dinode *dp; -    int rval; -    char *cp; - -    GETINUM(1,inum); - -    if (!checkactivedir()) -	return 1; -    rval = makeentry(curinum, inum, argv[2]); -    if (rval) -	printf("Ino %d entered as `%s'\n", inum, argv[2]); -    else -	printf("could not enter name? weird.\n"); -    curinode = ginode(curinum); -    return rval; -} - -CMDFUNCSTART(rm) -{ -    int rval; - -    if (!checkactivedir()) -	return 1; -    rval = changeino(curinum, argv[1], 0); -    if (rval & ALTERED) { -	printf("Name `%s' removed\n", argv[1]); -	return 0; -    } else { -	printf("could not remove name? weird.\n"); -	return 1; -    } -} - -long slotcount, desired; - -int -chinumfunc(idesc) -	struct inodesc *idesc; -{ -	register struct direct *dirp = idesc->id_dirp; - -	if (slotcount++ == desired) { -	    dirp->d_ino = idesc->id_parent; -	    return STOP|ALTERED|FOUND; -	} -	return KEEPON; -} - -CMDFUNCSTART(chinum) -{ -    int rval; -    char *cp; -    ino_t inum; -    struct inodesc idesc; -     -    slotcount = 0; -    if (!checkactivedir()) -	return 1; -    GETINUM(2,inum); - -    desired = strtol(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0' || desired < 0) { -	printf("invalid slot number `%s'\n", argv[1]); -	return 1; -    } - -    idesc.id_number = curinum; -    idesc.id_func = chinumfunc; -    idesc.id_fix = IGNORE; -    idesc.id_type = DATA; -    idesc.id_parent = inum;		/* XXX convenient hiding place */ - -    if (ckinode(curinode, &idesc) & FOUND) -	return 0; -    else { -	warnx("no %sth slot in current directory", argv[1]); -	return 1; -    } -} - -int -chnamefunc(idesc) -	struct inodesc *idesc; -{ -	register struct direct *dirp = idesc->id_dirp; -	struct direct testdir; - -	if (slotcount++ == desired) { -	    /* will name fit? */ -	    testdir.d_namlen = strlen(idesc->id_name); -	    if (DIRSIZ(NEWDIRFMT, &testdir) <= dirp->d_reclen) { -		dirp->d_namlen = testdir.d_namlen; -		strcpy(dirp->d_name, idesc->id_name); -		return STOP|ALTERED|FOUND; -	    } else -		return STOP|FOUND;	/* won't fit, so give up */ -	} -	return KEEPON; -} - -CMDFUNCSTART(chname) -{ -    int rval; -    char *cp; -    ino_t inum; -    struct inodesc idesc; -     -    slotcount = 0; -    if (!checkactivedir()) -	return 1; - -    desired = strtoul(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0') { -	printf("invalid slot number `%s'\n", argv[1]); -	return 1; -    } - -    idesc.id_number = curinum; -    idesc.id_func = chnamefunc; -    idesc.id_fix = IGNORE; -    idesc.id_type = DATA; -    idesc.id_name = argv[2]; - -    rval = ckinode(curinode, &idesc); -    if ((rval & (FOUND|ALTERED)) == (FOUND|ALTERED)) -	return 0; -    else if (rval & FOUND) { -	warnx("new name `%s' does not fit in slot %s\n", argv[2], argv[1]); -	return 1; -    } else { -	warnx("no %sth slot in current directory", argv[1]); -	return 1; -    } -} - -struct typemap { -    const char *typename; -    int typebits; -} typenamemap[]  = { -    {"file", IFREG}, -    {"dir", IFDIR}, -    {"socket", IFSOCK}, -    {"fifo", IFIFO}, -}; - -CMDFUNCSTART(newtype) -{ -    int rval = 1; -    int type; -    struct typemap *tp; - -    if (!checkactive()) -	return 1; -    type = curinode->di_mode & IFMT; -    for (tp = typenamemap; -	 tp < &typenamemap[sizeof(typemap)/sizeof(*typemap)]; -	 tp++) { -	if (!strcmp(argv[1], tp->typename)) { -	    printf("setting type to %s\n", tp->typename); -	    type = tp->typebits; -	    break; -	} -    } -    if (tp == &typenamemap[sizeof(typemap)/sizeof(*typemap)]) { -	warnx("type `%s' not known", argv[1]); -	warnx("try one of `file', `dir', `socket', `fifo'"); -	return 1; -    } -    curinode->di_mode &= ~IFMT; -    curinode->di_mode |= type; -    inodirty(); -    printactive(); -    return 0; -} - -CMDFUNCSTART(chmode) -{ -    int rval = 1; -    long modebits; -    char *cp; - -    if (!checkactive()) -	return 1; - -    modebits = strtol(argv[1], &cp, 8); -    if (cp == argv[1] || *cp != '\0' ) {  -	warnx("bad modebits `%s'", argv[1]); -	return 1; -    } -     -    curinode->di_mode &= ~07777; -    curinode->di_mode |= modebits; -    inodirty(); -    printactive(); -    return rval; -} - -CMDFUNCSTART(chaflags) -{ -    int rval = 1; -    u_long flags; -    char *cp; - -    if (!checkactive()) -	return 1; - -    flags = strtoul(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0' ) {  -	warnx("bad flags `%s'", argv[1]); -	return 1; -    } -     -    if (flags > UINT_MAX) { -	warnx("flags set beyond 32-bit range of field (%lx)\n", flags); -	return(1); -    } -    curinode->di_flags = flags; -    inodirty(); -    printactive(); -    return rval; -} - -CMDFUNCSTART(chgen) -{ -    int rval = 1; -    long gen; -    char *cp; - -    if (!checkactive()) -	return 1; - -    gen = strtol(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0' ) {  -	warnx("bad gen `%s'", argv[1]); -	return 1; -    } -     -    if (gen > INT_MAX || gen < INT_MIN) { -	warnx("gen set beyond 32-bit range of field (%lx)\n", gen); -	return(1); -    } -    curinode->di_gen = gen; -    inodirty(); -    printactive(); -    return rval; -} - -CMDFUNCSTART(linkcount) -{ -    int rval = 1; -    int lcnt; -    char *cp; - -    if (!checkactive()) -	return 1; - -    lcnt = strtol(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0' ) {  -	warnx("bad link count `%s'", argv[1]); -	return 1; -    } -    if (lcnt > USHRT_MAX || lcnt < 0) { -	warnx("max link count is %d\n", USHRT_MAX); -	return 1; -    } -     -    curinode->di_nlink = lcnt; -    inodirty(); -    printactive(); -    return rval; -} - -CMDFUNCSTART(chowner) -{ -    int rval = 1; -    unsigned long uid; -    char *cp; -    struct passwd *pwd; - -    if (!checkactive()) -	return 1; - -    uid = strtoul(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0' ) {  -	/* try looking up name */ -	if (pwd = getpwnam(argv[1])) { -	    uid = pwd->pw_uid; -	} else { -	    warnx("bad uid `%s'", argv[1]); -	    return 1; -	} -    } -     -    curinode->di_uid = uid; -    inodirty(); -    printactive(); -    return rval; -} - -CMDFUNCSTART(chgroup) -{ -    int rval = 1; -    unsigned long gid; -    char *cp; -    struct group *grp; - -    if (!checkactive()) -	return 1; - -    gid = strtoul(argv[1], &cp, 0); -    if (cp == argv[1] || *cp != '\0' ) {  -	if (grp = getgrnam(argv[1])) { -	    gid = grp->gr_gid; -	} else { -	    warnx("bad gid `%s'", argv[1]); -	    return 1; -	} -    } -     -    curinode->di_gid = gid; -    inodirty(); -    printactive(); -    return rval; -} - -int -dotime(name, rsec, rnsec) -	char *name; -	int32_t *rsec, *rnsec; -{ -    char *p, *val; -    struct tm t; -    int32_t sec; -    int32_t nsec; -    p = strchr(name, '.'); -    if (p) { -	*p = '\0'; -	nsec = strtoul(++p, &val, 0); -	if (val == p || *val != '\0' || nsec >= 1000000000 || nsec < 0) { -		warnx("invalid nanoseconds"); -		goto badformat; -	} -    } else -	nsec = 0; -    if (strlen(name) != 14) { -badformat: -	warnx("date format: YYYYMMDDHHMMSS[.nsec]"); -	return 1; -    } - -    for (p = name; *p; p++) -	if (*p < '0' || *p > '9') -	    goto badformat; -     -    p = name; -#define VAL() ((*p++) - '0') -    t.tm_year = VAL(); -    t.tm_year = VAL() + t.tm_year * 10; -    t.tm_year = VAL() + t.tm_year * 10; -    t.tm_year = VAL() + t.tm_year * 10 - 1900; -    t.tm_mon = VAL(); -    t.tm_mon = VAL() + t.tm_mon * 10 - 1; -    t.tm_mday = VAL(); -    t.tm_mday = VAL() + t.tm_mday * 10; -    t.tm_hour = VAL(); -    t.tm_hour = VAL() + t.tm_hour * 10; -    t.tm_min = VAL(); -    t.tm_min = VAL() + t.tm_min * 10; -    t.tm_sec = VAL(); -    t.tm_sec = VAL() + t.tm_sec * 10; -    t.tm_isdst = -1; - -    sec = mktime(&t); -    if (sec == -1) { -	warnx("date/time out of range"); -	return 1; -    } -    *rsec = sec; -    *rnsec = nsec; -    return 0; -} - -CMDFUNCSTART(chmtime) -{ -    if (dotime(argv[1], &curinode->di_ctime, &curinode->di_ctimensec)) -	return 1; -    inodirty(); -    printactive(); -    return 0; -} - -CMDFUNCSTART(chatime) -{ -    if (dotime(argv[1], &curinode->di_ctime, &curinode->di_ctimensec)) -	return 1; -    inodirty(); -    printactive(); -    return 0; -} - -CMDFUNCSTART(chctime) -{ -    if (dotime(argv[1], &curinode->di_ctime, &curinode->di_ctimensec)) -	return 1; -    inodirty(); -    printactive(); -    return 0; -} diff --git a/sbin/fsdb/fsdb.h b/sbin/fsdb/fsdb.h deleted file mode 100644 index af51907e3521c..0000000000000 --- a/sbin/fsdb/fsdb.h +++ /dev/null @@ -1,56 +0,0 @@ -/*	$NetBSD: fsdb.h,v 1.2 1995/10/08 23:18:11 thorpej Exp $	*/ - -/* - *  Copyright (c) 1995 John T. Kohl - *  All rights reserved. - *  - *  Redistribution and use in source and binary forms, with or without - *  modification, are permitted provided that the following conditions - *  are met: - *  1. Redistributions of source code must retain the above copyright - *     notice, this list of conditions and the following disclaimer. - *  2. Redistributions in binary form must reproduce the above copyright - *     notice, this list of conditions and the following disclaimer in the - *     documentation and/or other materials provided with the distribution. - *  3. The name of the author may not be used to endorse or promote products - *     derived from this software without specific prior written permission. - *  - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -extern int bread __P((int fd, char *buf, daddr_t blk, long size)); -extern void bwrite __P((int fd, char *buf, daddr_t blk, long size)); -extern void rwerror __P((char *mesg, daddr_t blk)); -extern int reply __P((char *question)); - -extern long dev_bsize; -extern long secsize; -extern int fsmodified; -extern int fsfd; - -struct cmdtable { -	const char *cmd; -	const char *helptxt; -	unsigned int minargc; -	unsigned int maxargc; -	int (*handler) __P((int argc, char *argv[])); -}; -extern struct dinode *curinode; -extern ino_t curinum; - -int argcount __P((struct cmdtable *cmdp, int argc, char *argv[])); -char **crack __P((char *line, int *argc)); -void printstat __P((const char *cp, ino_t inum, struct dinode *dp)); -int printactive __P((void)); -int checkactive __P((void)); -int checkactivedir __P((void)); diff --git a/sbin/fsdb/fsdbutil.c b/sbin/fsdb/fsdbutil.c deleted file mode 100644 index 1003b9d4d3e19..0000000000000 --- a/sbin/fsdb/fsdbutil.c +++ /dev/null @@ -1,204 +0,0 @@ -/*	$NetBSD: fsdbutil.c,v 1.2 1995/10/08 23:18:12 thorpej Exp $	*/ - -/* - *  Copyright (c) 1995 John T. Kohl - *  All rights reserved. - *  - *  Redistribution and use in source and binary forms, with or without - *  modification, are permitted provided that the following conditions - *  are met: - *  1. Redistributions of source code must retain the above copyright - *     notice, this list of conditions and the following disclaimer. - *  2. Redistributions in binary form must reproduce the above copyright - *     notice, this list of conditions and the following disclaimer in the - *     documentation and/or other materials provided with the distribution. - *  3. The name of the author may not be used to endorse or promote products - *     derived from this software without specific prior written permission. - *  - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static char rcsid[] = "$NetBSD: fsdbutil.c,v 1.2 1995/10/08 23:18:12 thorpej Exp $"; -#endif /* not lint */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/param.h> -#include <sys/time.h> -#include <sys/mount.h> -#include <ctype.h> -#include <fcntl.h> -#include <grp.h> -#include <pwd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include <ufs/ufs/dinode.h> -#include <ufs/ffs/fs.h> - -#include "fsdb.h" -#include "fsck.h" - -char ** -crack(line, argc) -	char *line; -	int *argc; -{ -    static char *argv[8]; -    int i; -    char *p, *val; -    for (p = line, i = 0; p != NULL && i < 8; i++) { -	while ((val = strsep(&p, " \t\n")) != NULL && *val == '\0') -	    /**/; -	if (val) -	    argv[i] = val; -	else -	    break; -    } -    *argc = i; -    return argv; -} - -int -argcount(cmdp, argc, argv) -	struct cmdtable *cmdp; -	int argc; -	char *argv[]; -{ -    if (cmdp->minargc == cmdp->maxargc) -	warnx("command `%s' takes %u arguments", cmdp->cmd, cmdp->minargc-1); -    else -	warnx("command `%s' takes from %u to %u arguments", -	      cmdp->cmd, cmdp->minargc-1, cmdp->maxargc-1); -	     -    warnx("usage: %s: %s", cmdp->cmd, cmdp->helptxt); -    return 1; -} - -void -printstat(cp, inum, dp) -	const char *cp; -	ino_t inum; -	struct dinode *dp; -{ -    struct group *grp; -    struct passwd *pw; -    char *p; - -    printf("%s: ", cp); -    switch (dp->di_mode & IFMT) { -    case IFDIR: -	puts("directory"); -	break; -    case IFREG: -	puts("regular file"); -	break; -    case IFBLK: -	printf("block special (%d,%d)", -	       major(dp->di_rdev), minor(dp->di_rdev)); -	break; -    case IFCHR: -	printf("character special (%d,%d)", -	       major(dp->di_rdev), minor(dp->di_rdev)); -	break; -    case IFLNK: -	fputs("symlink",stdout); -	if (dp->di_size > 0 && dp->di_size < MAXSYMLINKLEN && -	    dp->di_blocks == 0) -	    printf(" to `%.*s'\n", (int) dp->di_size, (char *)dp->di_shortlink); -	else -		putchar('\n'); -	break; -    case IFSOCK: -	puts("socket"); -	break; -    case IFIFO: -	puts("fifo"); -	break; -    } -    printf("I=%lu MODE=%o SIZE=%qu", inum, dp->di_mode, dp->di_size); -    p = ctime(&dp->di_mtime); -    printf("\n\tMTIME=%15.15s %4.4s [%d nsec]", &p[4], &p[20], -	   dp->di_mtimensec); -    p = ctime(&dp->di_ctime); -    printf("\n\tCTIME=%15.15s %4.4s [%d nsec]", &p[4], &p[20], -	   dp->di_ctimensec); -    p = ctime(&dp->di_atime); -    printf("\n\tATIME=%15.15s %4.4s [%d nsec]\n", &p[4], &p[20], -	   dp->di_atimensec); - -    if (pw = getpwuid(dp->di_uid)) -	printf("OWNER=%s ", pw->pw_name); -    else -	printf("OWNUID=%u ", dp->di_uid); -    if (grp = getgrgid(dp->di_gid)) -	printf("GRP=%s ", grp->gr_name); -    else -	printf("GID=%u ", dp->di_gid); - -    printf("LINKCNT=%hd FLAGS=%#x BLKCNT=%x GEN=%x\n", dp->di_nlink, dp->di_flags, -	   dp->di_blocks, dp->di_gen); -} - -int -checkactive() -{ -    if (!curinode) { -	warnx("no current inode\n"); -	return 0; -    } -    return 1; -} - -int -checkactivedir() -{ -    if (!curinode) { -	warnx("no current inode\n"); -	return 0; -    } -    if ((curinode->di_mode & IFMT) != IFDIR) { -	warnx("inode %d not a directory", curinum); -	return 0; -    } -    return 1; -} - -int -printactive() -{ -    if (!checkactive()) -	return 1; -    switch (curinode->di_mode & IFMT) { -    case IFDIR: -    case IFREG: -    case IFBLK: -    case IFCHR: -    case IFLNK: -    case IFSOCK: -    case IFIFO: -	printstat("current inode", curinum, curinode); -	break; -    case 0: -	printf("current inode %d: unallocated inode\n", curinum); -	break; -    default: -	printf("current inode %d: screwy itype 0%o (mode 0%o)?\n", -	       curinum, curinode->di_mode & IFMT, curinode->di_mode); -	break; -    } -    return 0; -} diff --git a/share/man/man4/ccd.4 b/share/man/man4/ccd.4 deleted file mode 100644 index a292bf98360fc..0000000000000 --- a/share/man/man4/ccd.4 +++ /dev/null @@ -1,115 +0,0 @@ -.\"	$NetBSD: ccd.4,v 1.5 1995/10/09 06:09:09 thorpej Exp $ -.\" -.\" Copyright (c) 1994 Jason Downs. -.\" Copyright (c) 1994, 1995 Jason R. Thorpe. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\"    notice, this list of conditions and the following disclaimer in the -.\"    documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\"    must display the following acknowledgement: -.\"	This product includes software developed for the NetBSD Project -.\"	by Jason Downs and Jason R. Thorpe. -.\" 4. Neither the name of the author nor the names of its contributors -.\"    may be used to endorse or promote products derived from this software -.\"    without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.Dd August 9, 1995 -.Dt CCD 4 -.Os NetBSD -.Sh NAME -.Nm ccd -.Nd Concatenated Disk Driver -.Sh SYNOPSIS -.Cd "pseudo-device ccd 4" -.Sh DESCRIPTION -The -.Nm -driver provides the capability of combining one or more disks/partitions -into one virtual disk. -.Pp -This document assumes that you're familiar with how to generate kernels, -how to properly configure disks and pseudo-devices in a kernel -configuration file, and how to partition disks. -.Pp -Note that the -.Sq raw -partitions of the disks -.Pa should not -be combined.  Each component partition should be offset at least one -cylinder from the beginning of the component disk.  This avoids potential -conflicts between the compoent disk's disklabel and the -.Nm ccd's -disklabel.  The kernel will only allow component partitions of type FS_BSDFFS. -.Pp -In order to compile in support for the ccd, you must add a line similar -to the following to your kernel configuration file: -.Bd -unfilled -offset indent -pseudo-device	ccd	4	# concatenated disk devices -.Ed -.Pp -The count argument is how many -.Nm ccds -memory is allocated for a boot time.  In this example, no more than 4 -.Nm ccds -may be configured. -.Pp -A -.Nm ccd -may be either serially concatenated or interleaved.  If a -.Nm ccd -is interleaved correctly, a -.Dq striping -effect is achieved, which can increase performance.  The optimum interleave -factor is typically the size of a track.  Since the interleave factor -is expressed in units of DEV_BSIZE, one must account for sector sizes -other than DEV_BSIZE in order to calculate the correct interleave. -The kernel will not allow an interleave factor less than the size -of the largest component sector divided by DEV_BSIZE. -.Pp -Note that best performance is achieved if all compent disks have the same -geometery and size.  Optimum striping cannot occur with different -disk types. -.Pp -There is a run-time utility that is used for configuring -.Nm ccds . -See -.Xr ccdconfig 8 -for more information. -.Sh WARNINGS -If just one (or more) of the disks in a -.Nm ccd -fails, the entire -file system will be lost. -.Sh FILES -/dev/{,r}ccd* - ccd device special files. -.Pp -.Sh HISTORY -The concatenated disk driver was originally written at the University of -Utah. -.Sh SEE ALSO -.Xr MAKEDEV 8 , -.Xr ccdconfig 8 , -.Xr config 8 , -.Xr config.old 8 , -.Xr fsck 8 , -.Xr mount 8 , -.Xr newfs 8 . diff --git a/sys/dev/ccd/ccd.c b/sys/dev/ccd/ccd.c deleted file mode 100644 index c8d33a4b867eb..0000000000000 --- a/sys/dev/ccd/ccd.c +++ /dev/null @@ -1,1428 +0,0 @@ -/*	$NetBSD: ccd.c,v 1.22 1995/12/08 19:13:26 thorpej Exp $	*/ - -/* - * Copyright (c) 1995 Jason R. Thorpe. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed for the NetBSD Project - *	by Jason R. Thorpe. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Copyright (c) 1988 University of Utah. - * Copyright (c) 1990, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * the Systems Programming Group of the University of Utah Computer - * Science Department. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed by the University of - *	California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - *    may be used to endorse or promote products derived from this software - *    without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: Utah $Hdr: cd.c 1.6 90/11/28$ - * - *	@(#)cd.c	8.2 (Berkeley) 11/16/93 - */ - -/* - * "Concatenated" disk driver. - * - * Dynamic configuration and disklabel support by: - *	Jason R. Thorpe <thorpej@nas.nasa.gov> - *	Numerical Aerodynamic Simulation Facility - *	Mail Stop 258-6 - *	NASA Ames Research Center - *	Moffett Field, CA 94035 - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/errno.h> -#include <sys/dkstat.h> -#include <sys/buf.h> -#include <sys/malloc.h> -#include <sys/namei.h> -#include <sys/conf.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <sys/disklabel.h> -#include <sys/device.h> -#include <sys/disk.h> -#include <sys/syslog.h> -#include <sys/fcntl.h> -#include <sys/vnode.h> - -#include <dev/ccdvar.h> - -#if defined(CCDDEBUG) && !defined(DEBUG) -#define DEBUG -#endif - -#ifdef DEBUG -int ccddebug = 0x00; -#define CCDB_FOLLOW	0x01 -#define CCDB_INIT	0x02 -#define CCDB_IO		0x04 -#define CCDB_LABEL	0x08 -#define CCDB_VNODE	0x10 -#endif - -#define	ccdunit(x)	DISKUNIT(x) - -struct ccdbuf { -	struct buf	cb_buf;		/* new I/O buf */ -	struct buf	*cb_obp;	/* ptr. to original I/O buf */ -	int		cb_unit;	/* target unit */ -	int		cb_comp;	/* target component */ -}; - -#define	getccdbuf()		\ -	((struct ccdbuf *)malloc(sizeof(struct ccdbuf), M_DEVBUF, M_WAITOK)) -#define putccdbuf(cbp)		\ -	free((caddr_t)(cbp), M_DEVBUF) - -#define CCDLABELDEV(dev)	\ -	(MAKEDISKDEV(major((dev)), ccdunit((dev)), RAW_PART)) - -/* {b,c}devsw[] function prototypes */ -dev_type_open(ccdopen); -dev_type_close(ccdclose); -dev_type_strategy(ccdstrategy); -dev_type_ioctl(ccdioctl); -dev_type_read(ccdread); -dev_type_write(ccdwrite); - -/* called by main() at boot time */ -void	ccdattach __P((int)); - -/* called by biodone() at interrupt time */ -void	ccdiodone __P((struct ccdbuf *cbp)); - -static	void ccdstart __P((struct ccd_softc *, struct buf *)); -static	void ccdinterleave __P((struct ccd_softc *, int)); -static	void ccdintr __P((struct ccd_softc *, struct buf *)); -static	int ccdinit __P((struct ccddevice *, char **, struct proc *)); -static	int ccdlookup __P((char *, struct proc *p, struct vnode **)); -static	struct ccdbuf *ccdbuffer __P((struct ccd_softc *, struct buf *, -		daddr_t, caddr_t, long)); -static	void ccdgetdisklabel __P((dev_t)); -static	void ccdmakedisklabel __P((struct ccd_softc *)); -static	int ccdlock __P((struct ccd_softc *)); -static	void ccdunlock __P((struct ccd_softc *)); - -#ifdef DEBUG -static	void printiinfo __P((struct ccdiinfo *)); -#endif - -/* Non-private for the benefit of libkvm. */ -struct	ccd_softc *ccd_softc; -struct	ccddevice *ccddevs; -int	numccd = 0; - -/* - * Called by main() during pseudo-device attachment.  All we need - * to do is allocate enough space for devices to be configured later. - */ -void -ccdattach(num) -	int num; -{ -	int i; - -	if (num <= 0) { -#ifdef DIAGNOSTIC -		panic("ccdattach: count <= 0"); -#endif -		return; -	} - -	ccd_softc = (struct ccd_softc *)malloc(num * sizeof(struct ccd_softc), -	    M_DEVBUF, M_NOWAIT); -	ccddevs = (struct ccddevice *)malloc(num * sizeof(struct ccddevice), -	    M_DEVBUF, M_NOWAIT); -	if ((ccd_softc == NULL) || (ccddevs == NULL)) { -		printf("WARNING: no memory for concatenated disks\n"); -		if (ccd_softc != NULL) -			free(ccd_softc, M_DEVBUF); -		if (ccddevs != NULL) -			free(ccddevs, M_DEVBUF); -		return; -	} -	numccd = num; -	bzero(ccd_softc, num * sizeof(struct ccd_softc)); -	bzero(ccddevs, num * sizeof(struct ccddevice)); - -	/* XXX: is this necessary? */ -	for (i = 0; i < numccd; ++i) -		ccddevs[i].ccd_dk = -1; -} - -static int -ccdinit(ccd, cpaths, p) -	struct ccddevice *ccd; -	char **cpaths; -	struct proc *p; -{ -	register struct ccd_softc *cs = &ccd_softc[ccd->ccd_unit]; -	register struct ccdcinfo *ci; -	register size_t size; -	register int ix; -	struct vnode *vp; -	struct vattr va; -	size_t minsize; -	int maxsecsize; -	struct partinfo dpart; -	struct ccdgeom *ccg = &cs->sc_geom; -	char tmppath[MAXPATHLEN]; -	int error; - -#ifdef DEBUG -	if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -		printf("ccdinit: unit %d\n", ccd->ccd_unit); -#endif - -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -	cs->sc_dk = ccd->ccd_dk; -#endif -	cs->sc_size = 0; -	cs->sc_ileave = ccd->ccd_interleave; -	cs->sc_nccdisks = ccd->ccd_ndev; - -	/* Allocate space for the component info. */ -	cs->sc_cinfo = malloc(cs->sc_nccdisks * sizeof(struct ccdcinfo), -	    M_DEVBUF, M_WAITOK); - -	/* -	 * Verify that each component piece exists and record -	 * relevant information about it. -	 */ -	maxsecsize = 0; -	minsize = 0; -	for (ix = 0; ix < cs->sc_nccdisks; ix++) { -		vp = ccd->ccd_vpp[ix]; -		ci = &cs->sc_cinfo[ix]; -		ci->ci_vp = vp; - -		/* -		 * Copy in the pathname of the component. -		 */ -		bzero(tmppath, sizeof(tmppath));	/* sanity */ -		if (error = copyinstr(cpaths[ix], tmppath, -		    MAXPATHLEN, &ci->ci_pathlen)) { -#ifdef DEBUG -			if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -				printf("ccd%d: can't copy path, error = %d\n", -				    ccd->ccd_unit, error); -#endif -			free(cs->sc_cinfo, M_DEVBUF); -			return (error); -		} -		ci->ci_path = malloc(ci->ci_pathlen, M_DEVBUF, M_WAITOK); -		bcopy(tmppath, ci->ci_path, ci->ci_pathlen); - -		/* -		 * XXX: Cache the component's dev_t. -		 */ -		if (error = VOP_GETATTR(vp, &va, p->p_ucred, p)) { -#ifdef DEBUG -			if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -				printf("ccd%d: %s: getattr failed %s = %d\n", -				    ccd->ccd_unit, ci->ci_path, -				    "error", error); -#endif -			free(ci->ci_path, M_DEVBUF); -			free(cs->sc_cinfo, M_DEVBUF); -			return (error); -		} -		ci->ci_dev = va.va_rdev; - -		/* -		 * Get partition information for the component. -		 */ -		if (error = VOP_IOCTL(vp, DIOCGPART, (caddr_t)&dpart, -		    FREAD, p->p_ucred, p)) { -#ifdef DEBUG -			if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -				 printf("ccd%d: %s: ioctl failed, error = %d\n", -				     ccd->ccd_unit, ci->ci_path, error); -#endif -			free(ci->ci_path, M_DEVBUF); -			free(cs->sc_cinfo, M_DEVBUF); -			return (error); -		} -		if (dpart.part->p_fstype == FS_BSDFFS) { -			maxsecsize = -			    ((dpart.disklab->d_secsize > maxsecsize) ? -			    dpart.disklab->d_secsize : maxsecsize); -			size = dpart.part->p_size; -		} else { -#ifdef DEBUG -			if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -				printf("ccd%d: %s: incorrect partition type\n", -				    ccd->ccd_unit, ci->ci_path); -#endif -			free(ci->ci_path, M_DEVBUF); -			free(cs->sc_cinfo, M_DEVBUF); -			return (EFTYPE); -		} - -		/* -		 * Calculate the size, truncating to an interleave -		 * boundary if necessary. -		 */ -		if (size < 0) -			size = 0; - -		if (cs->sc_ileave > 1) -			size -= size % cs->sc_ileave; - -		if (size == 0) { -#ifdef DEBUG -			if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -				printf("ccd%d: %s: size == 0\n", -				    ccd->ccd_unit, ci->ci_path); -#endif -			free(ci->ci_path, M_DEVBUF); -			free(cs->sc_cinfo, M_DEVBUF); -			return (ENODEV); -		} - -		if (minsize == 0 || size < minsize) -			minsize = size; -		ci->ci_size = size; -		cs->sc_size += size; -	} - -	/* -	 * Don't allow the interleave to be smaller than -	 * the biggest component sector. -	 */ -	if ((cs->sc_ileave > 0) && -	    (cs->sc_ileave < (maxsecsize / DEV_BSIZE))) { -#ifdef DEBUG -		if (ccddebug & (CCDB_FOLLOW|CCDB_INIT)) -			printf("ccd%d: interleave must be at least %d\n", -			    ccd->ccd_unit, (maxsecsize / DEV_BSIZE)); -#endif -		free(ci->ci_path, M_DEVBUF); -		free(cs->sc_cinfo, M_DEVBUF); -		return (EINVAL); -	} - -	/* -	 * If uniform interleave is desired set all sizes to that of -	 * the smallest component. -	 */ -	if (ccd->ccd_flags & CCDF_UNIFORM) { -		for (ci = cs->sc_cinfo; -		     ci < &cs->sc_cinfo[cs->sc_nccdisks]; ci++) -			ci->ci_size = minsize; -		cs->sc_size = cs->sc_nccdisks * minsize; -	} - -	/* -	 * Construct the interleave table. -	 */ -	ccdinterleave(cs, ccd->ccd_unit); - -	/* -	 * Create pseudo-geometry based on 1MB cylinders.  It's -	 * pretty close. -	 */ -	ccg->ccg_secsize = DEV_BSIZE; -	ccg->ccg_ntracks = 1; -	ccg->ccg_nsectors = 1024 * (1024 / ccg->ccg_secsize); -	ccg->ccg_ncylinders = cs->sc_size / ccg->ccg_nsectors; - -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -	if (ccd->ccd_dk >= 0) -		dk_wpms[ccd->ccd_dk] = 32 * (60 * DEV_BSIZE / 2);     /* XXX */ -#endif - -	cs->sc_flags |= CCDF_INITED; -	cs->sc_cflags = ccd->ccd_flags;	/* So we can find out later... */ -	cs->sc_unit = ccd->ccd_unit; -	return (0); -} - -static void -ccdinterleave(cs, unit) -	register struct ccd_softc *cs; -	int unit; -{ -	register struct ccdcinfo *ci, *smallci; -	register struct ccdiinfo *ii; -	register daddr_t bn, lbn; -	register int ix; -	u_long size; - -#ifdef DEBUG -	if (ccddebug & CCDB_INIT) -		printf("ccdinterleave(%x): ileave %d\n", cs, cs->sc_ileave); -#endif -	/* -	 * Allocate an interleave table. -	 * Chances are this is too big, but we don't care. -	 */ -	size = (cs->sc_nccdisks + 1) * sizeof(struct ccdiinfo); -	cs->sc_itable = (struct ccdiinfo *)malloc(size, M_DEVBUF, M_WAITOK); -	bzero((caddr_t)cs->sc_itable, size); - -	/* -	 * Trivial case: no interleave (actually interleave of disk size). -	 * Each table entry represents a single component in its entirety. -	 */ -	if (cs->sc_ileave == 0) { -		bn = 0; -		ii = cs->sc_itable; - -		for (ix = 0; ix < cs->sc_nccdisks; ix++) { -			/* Allocate space for ii_index. */ -			ii->ii_index = malloc(sizeof(int), M_DEVBUF, M_WAITOK); -			ii->ii_ndisk = 1; -			ii->ii_startblk = bn; -			ii->ii_startoff = 0; -			ii->ii_index[0] = ix; -			bn += cs->sc_cinfo[ix].ci_size; -			ii++; -		} -		ii->ii_ndisk = 0; -#ifdef DEBUG -		if (ccddebug & CCDB_INIT) -			printiinfo(cs->sc_itable); -#endif -		return; -	} - -	/* -	 * The following isn't fast or pretty; it doesn't have to be. -	 */ -	size = 0; -	bn = lbn = 0; -	for (ii = cs->sc_itable; ; ii++) { -		/* Allocate space for ii_index. */ -		ii->ii_index = malloc((sizeof(int) * cs->sc_nccdisks), -		    M_DEVBUF, M_WAITOK); - -		/* -		 * Locate the smallest of the remaining components -		 */ -		smallci = NULL; -		for (ci = cs->sc_cinfo; -		     ci < &cs->sc_cinfo[cs->sc_nccdisks]; ci++) -			if (ci->ci_size > size && -			    (smallci == NULL || -			     ci->ci_size < smallci->ci_size)) -				smallci = ci; - -		/* -		 * Nobody left, all done -		 */ -		if (smallci == NULL) { -			ii->ii_ndisk = 0; -			break; -		} - -		/* -		 * Record starting logical block and component offset -		 */ -		ii->ii_startblk = bn / cs->sc_ileave; -		ii->ii_startoff = lbn; - -		/* -		 * Determine how many disks take part in this interleave -		 * and record their indices. -		 */ -		ix = 0; -		for (ci = cs->sc_cinfo; -		     ci < &cs->sc_cinfo[cs->sc_nccdisks]; ci++) -			if (ci->ci_size >= smallci->ci_size) -				ii->ii_index[ix++] = ci - cs->sc_cinfo; -		ii->ii_ndisk = ix; -		bn += ix * (smallci->ci_size - size); -		lbn = smallci->ci_size / cs->sc_ileave; -		size = smallci->ci_size; -	} -#ifdef DEBUG -	if (ccddebug & CCDB_INIT) -		printiinfo(cs->sc_itable); -#endif -} - -/* ARGSUSED */ -int -ccdopen(dev, flags, fmt, p) -	dev_t dev; -	int flags, fmt; -	struct proc *p; -{ -	int unit = ccdunit(dev); -	struct ccd_softc *cs; -	struct disklabel *lp; -	int error = 0, part, pmask; - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdopen(%x, %x)\n", dev, flags); -#endif -	if (unit >= numccd) -		return (ENXIO); -	cs = &ccd_softc[unit]; - -	if (error = ccdlock(cs)) -		return (error); - -	lp = &cs->sc_dkdev.dk_label; - -	part = DISKPART(dev); -	pmask = (1 << part); - -	/* -	 * If we're initialized, check to see if there are any other -	 * open partitions.  If not, then it's safe to update -	 * the in-core disklabel. -	 */ -	if ((cs->sc_flags & CCDF_INITED) && (cs->sc_dkdev.dk_openmask == 0)) -		ccdgetdisklabel(dev); - -	/* Check that the partition exists. */ -	if (part != RAW_PART && ((part > lp->d_npartitions) || -	    (lp->d_partitions[part].p_fstype == FS_UNUSED))) { -		error = ENXIO; -		goto done; -	} - -	/* Prevent our unit from being unconfigured while open. */ -	switch (fmt) { -	case S_IFCHR: -		cs->sc_dkdev.dk_copenmask |= pmask; -		break; - -	case S_IFBLK: -		cs->sc_dkdev.dk_bopenmask |= pmask; -		break; -	} -	cs->sc_dkdev.dk_openmask = -	    cs->sc_dkdev.dk_copenmask | cs->sc_dkdev.dk_bopenmask; - - done: -	ccdunlock(cs); -	return (0); -} - -/* ARGSUSED */ -int -ccdclose(dev, flags, fmt, p) -	dev_t dev; -	int flags, fmt; -	struct proc *p; -{ -	int unit = ccdunit(dev); -	struct ccd_softc *cs; -	int error = 0, part; - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdclose(%x, %x)\n", dev, flags); -#endif - -	if (unit >= numccd) -		return (ENXIO); -	cs = &ccd_softc[unit]; - -	if (error = ccdlock(cs)) -		return (error); - -	part = DISKPART(dev); - -	/* ...that much closer to allowing unconfiguration... */ -	switch (fmt) { -	case S_IFCHR: -		cs->sc_dkdev.dk_copenmask &= ~(1 << part); -		break; - -	case S_IFBLK: -		cs->sc_dkdev.dk_bopenmask &= ~(1 << part); -		break; -	} -	cs->sc_dkdev.dk_openmask = -	    cs->sc_dkdev.dk_copenmask | cs->sc_dkdev.dk_bopenmask; - -	ccdunlock(cs); -	return (0); -} - -void -ccdstrategy(bp) -	register struct buf *bp; -{ -	register int unit = ccdunit(bp->b_dev); -	register struct ccd_softc *cs = &ccd_softc[unit]; -	register daddr_t bn; -	register int sz, s; -	int wlabel; -	struct disklabel *lp; - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdstrategy(%x): unit %d\n", bp, unit); -#endif -	if ((cs->sc_flags & CCDF_INITED) == 0) { -		bp->b_error = ENXIO; -		bp->b_flags |= B_ERROR; -		goto done; -	} - -	/* If it's a nil transfer, wake up the top half now. */ -	if (bp->b_bcount == 0) -		goto done; - -	lp = &cs->sc_dkdev.dk_label; - -	/* -	 * Do bounds checking and adjust transfer.  If there's an -	 * error, the bounds check will flag that for us. -	 */ -	wlabel = cs->sc_flags & (CCDF_WLABEL|CCDF_LABELLING); -	if (DISKPART(bp->b_dev) != RAW_PART) -		if (bounds_check_with_label(bp, lp, wlabel) <= 0) -			goto done; - -	bp->b_resid = bp->b_bcount; - -	/* -	 * "Start" the unit. -	 */ -	s = splbio(); -	ccdstart(cs, bp); -	splx(s); -	return; -done: -	biodone(bp); -} - -static void -ccdstart(cs, bp) -	register struct ccd_softc *cs; -	register struct buf *bp; -{ -	register long bcount, rcount; -	struct ccdbuf *cbp; -	caddr_t addr; -	daddr_t bn; -	struct partition *pp; - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdstart(%x, %x)\n", cs, bp); -#endif - -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -	/* -	 * Instrumentation (not very meaningful) -	 */ -	cs->sc_nactive++; -	if (cs->sc_dk >= 0) { -		dk_busy |= 1 << cs->sc_dk; -		dk_xfer[cs->sc_dk]++; -		dk_wds[cs->sc_dk] += bp->b_bcount >> 6; -	} -#endif - -	/* -	 * Translate the partition-relative block number to an absolute. -	 */ -	bn = bp->b_blkno; -	if (DISKPART(bp->b_dev) != RAW_PART) { -		pp = &cs->sc_dkdev.dk_label.d_partitions[DISKPART(bp->b_dev)]; -		bn += pp->p_offset; -	} - -	/* -	 * Allocate component buffers and fire off the requests -	 */ -	addr = bp->b_data; -	for (bcount = bp->b_bcount; bcount > 0; bcount -= rcount) { -		cbp = ccdbuffer(cs, bp, bn, addr, bcount); -		rcount = cbp->cb_buf.b_bcount; -		if ((cbp->cb_buf.b_flags & B_READ) == 0) -			cbp->cb_buf.b_vp->v_numoutput++; -		VOP_STRATEGY(&cbp->cb_buf); -		bn += btodb(rcount); -		addr += rcount; -	} -} - -/* - * Build a component buffer header. - */ -static struct ccdbuf * -ccdbuffer(cs, bp, bn, addr, bcount) -	register struct ccd_softc *cs; -	struct buf *bp; -	daddr_t bn; -	caddr_t addr; -	long bcount; -{ -	register struct ccdcinfo *ci; -	register struct ccdbuf *cbp; -	register daddr_t cbn, cboff; - -#ifdef DEBUG -	if (ccddebug & CCDB_IO) -		printf("ccdbuffer(%x, %x, %d, %x, %d)\n", -		       cs, bp, bn, addr, bcount); -#endif -	/* -	 * Determine which component bn falls in. -	 */ -	cbn = bn; -	cboff = 0; - -	/* -	 * Serially concatenated -	 */ -	if (cs->sc_ileave == 0) { -		register daddr_t sblk; - -		sblk = 0; -		for (ci = cs->sc_cinfo; cbn >= sblk + ci->ci_size; ci++) -			sblk += ci->ci_size; -		cbn -= sblk; -	} -	/* -	 * Interleaved -	 */ -	else { -		register struct ccdiinfo *ii; -		int ccdisk, off; - -		cboff = cbn % cs->sc_ileave; -		cbn /= cs->sc_ileave; -		for (ii = cs->sc_itable; ii->ii_ndisk; ii++) -			if (ii->ii_startblk > cbn) -				break; -		ii--; -		off = cbn - ii->ii_startblk; -		if (ii->ii_ndisk == 1) { -			ccdisk = ii->ii_index[0]; -			cbn = ii->ii_startoff + off; -		} else { -			ccdisk = ii->ii_index[off % ii->ii_ndisk]; -			cbn = ii->ii_startoff + off / ii->ii_ndisk; -		} -		cbn *= cs->sc_ileave; -		ci = &cs->sc_cinfo[ccdisk]; -	} - -	/* -	 * Fill in the component buf structure. -	 */ -	cbp = getccdbuf(); -	cbp->cb_buf.b_flags = bp->b_flags | B_CALL; -	cbp->cb_buf.b_iodone = (void (*)())ccdiodone; -	cbp->cb_buf.b_proc = bp->b_proc; -	cbp->cb_buf.b_dev = ci->ci_dev;		/* XXX */ -	cbp->cb_buf.b_blkno = cbn + cboff; -	cbp->cb_buf.b_data = addr; -	cbp->cb_buf.b_vp = ci->ci_vp; -	if (cs->sc_ileave == 0) -		cbp->cb_buf.b_bcount = dbtob(ci->ci_size - cbn); -	else -		cbp->cb_buf.b_bcount = dbtob(cs->sc_ileave - cboff); -	if (cbp->cb_buf.b_bcount > bcount) -		cbp->cb_buf.b_bcount = bcount; - -	/* -	 * context for ccdiodone -	 */ -	cbp->cb_obp = bp; -	cbp->cb_unit = cs - ccd_softc; -	cbp->cb_comp = ci - cs->sc_cinfo; - -#ifdef DEBUG -	if (ccddebug & CCDB_IO) -		printf(" dev %x(u%d): cbp %x bn %d addr %x bcnt %d\n", -		       ci->ci_dev, ci-cs->sc_cinfo, cbp, cbp->cb_buf.b_blkno, -		       cbp->cb_buf.b_data, cbp->cb_buf.b_bcount); -#endif -	return (cbp); -} - -static void -ccdintr(cs, bp) -	register struct ccd_softc *cs; -	register struct buf *bp; -{ - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdintr(%x, %x)\n", cs, bp); -#endif -	/* -	 * Request is done for better or worse, wakeup the top half. -	 */ -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -	--cs->sc_nactive; -#ifdef DIAGNOSTIC -	if (cs->sc_nactive < 0) -		panic("ccdintr: ccd%d: sc_nactive < 0", cs->sc_unit); -#endif - -	if (cs->sc_nactive == 0 && cs->sc_dk >= 0) -		dk_busy &= ~(1 << cs->sc_dk); -#endif -	if (bp->b_flags & B_ERROR) -		bp->b_resid = bp->b_bcount; -	biodone(bp); -} - -/* - * Called at interrupt time. - * Mark the component as done and if all components are done, - * take a ccd interrupt. - */ -void -ccdiodone(cbp) -	struct ccdbuf *cbp; -{ -	register struct buf *bp = cbp->cb_obp; -	register int unit = cbp->cb_unit; -	int count, s; - -	s = splbio(); -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdiodone(%x)\n", cbp); -	if (ccddebug & CCDB_IO) { -		printf("ccdiodone: bp %x bcount %d resid %d\n", -		       bp, bp->b_bcount, bp->b_resid); -		printf(" dev %x(u%d), cbp %x bn %d addr %x bcnt %d\n", -		       cbp->cb_buf.b_dev, cbp->cb_comp, cbp, -		       cbp->cb_buf.b_blkno, cbp->cb_buf.b_data, -		       cbp->cb_buf.b_bcount); -	} -#endif - -	if (cbp->cb_buf.b_flags & B_ERROR) { -		bp->b_flags |= B_ERROR; -		bp->b_error = cbp->cb_buf.b_error ? cbp->cb_buf.b_error : EIO; -#ifdef DEBUG -		printf("ccd%d: error %d on component %d\n", -		       unit, bp->b_error, cbp->cb_comp); -#endif -	} -	count = cbp->cb_buf.b_bcount; -	putccdbuf(cbp); - -	/* -	 * If all done, "interrupt". -	 */ -	bp->b_resid -= count; -	if (bp->b_resid < 0) -		panic("ccdiodone: count"); -	if (bp->b_resid == 0) -		ccdintr(&ccd_softc[unit], bp); -	splx(s); -} - -/* ARGSUSED */ -int -ccdread(dev, uio, flags) -	dev_t dev; -	struct uio *uio; -	int flags; -{ -	int unit = ccdunit(dev); -	struct ccd_softc *cs; - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdread(%x, %x)\n", dev, uio); -#endif -	if (unit >= numccd) -		return (ENXIO); -	cs = &ccd_softc[unit]; - -	if ((cs->sc_flags & CCDF_INITED) == 0) -		return (ENXIO); - -	/* -	 * XXX: It's not clear that using minphys() is completely safe, -	 * in particular, for raw I/O.  Underlying devices might have some -	 * non-obvious limits, because of the copy to user-space. -	 */ -	return (physio(ccdstrategy, NULL, dev, B_READ, minphys, uio)); -} - -/* ARGSUSED */ -int -ccdwrite(dev, uio, flags) -	dev_t dev; -	struct uio *uio; -	int flags; -{ -	int unit = ccdunit(dev); -	struct ccd_softc *cs; - -#ifdef DEBUG -	if (ccddebug & CCDB_FOLLOW) -		printf("ccdwrite(%x, %x)\n", dev, uio); -#endif -	if (unit >= numccd) -		return (ENXIO); -	cs = &ccd_softc[unit]; - -	if ((cs->sc_flags & CCDF_INITED) == 0) -		return (ENXIO); - -	/* -	 * XXX: It's not clear that using minphys() is completely safe, -	 * in particular, for raw I/O.  Underlying devices might have some -	 * non-obvious limits, because of the copy to user-space. -	 */ -	return (physio(ccdstrategy, NULL, dev, B_WRITE, minphys, uio)); -} - -int -ccdioctl(dev, cmd, data, flag, p) -	dev_t dev; -	u_long cmd; -	caddr_t data; -	int flag; -	struct proc *p; -{ -	int unit = ccdunit(dev); -	int i, j, lookedup = 0, error = 0; -	int part, pmask, s; -	struct ccd_softc *cs; -	struct ccd_ioctl *ccio = (struct ccd_ioctl *)data; -	struct ccddevice ccd; -	char **cpp; -	struct vnode **vpp; -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -	extern int dkn; -#endif - -	if (unit >= numccd) -		return (ENXIO); -	cs = &ccd_softc[unit]; - -	bzero(&ccd, sizeof(ccd)); - -	switch (cmd) { -	case CCDIOCSET: -		if (cs->sc_flags & CCDF_INITED) -			return (EBUSY); - -		if ((flag & FWRITE) == 0) -			return (EBADF); - -		if (error = ccdlock(cs)) -			return (error); - -		/* Fill in some important bits. */ -		ccd.ccd_unit = unit; -		ccd.ccd_interleave = ccio->ccio_ileave; -		ccd.ccd_flags = ccio->ccio_flags & CCDF_USERMASK; - -		/* -		 * Allocate space for and copy in the array of -		 * componet pathnames and device numbers. -		 */ -		cpp = malloc(ccio->ccio_ndisks * sizeof(char *), -		    M_DEVBUF, M_WAITOK); -		vpp = malloc(ccio->ccio_ndisks * sizeof(struct vnode *), -		    M_DEVBUF, M_WAITOK); - -		error = copyin((caddr_t)ccio->ccio_disks, (caddr_t)cpp, -		    ccio->ccio_ndisks * sizeof(char **)); -		if (error) { -			free(vpp, M_DEVBUF); -			free(cpp, M_DEVBUF); -			ccdunlock(cs); -			return (error); -		} - -#ifdef DEBUG -		if (ccddebug & CCDB_INIT) -			for (i = 0; i < ccio->ccio_ndisks; ++i) -				printf("ccdioctl: component %d: 0x%x\n", -				    i, cpp[i]); -#endif - -		for (i = 0; i < ccio->ccio_ndisks; ++i) { -#ifdef DEBUG -			if (ccddebug & CCDB_INIT) -				printf("ccdioctl: lookedup = %d\n", lookedup); -#endif -			if (error = ccdlookup(cpp[i], p, &vpp[i])) { -				for (j = 0; j < lookedup; ++j) -					(void)vn_close(vpp[j], FREAD|FWRITE, -					    p->p_ucred, p); -				free(vpp, M_DEVBUF); -				free(cpp, M_DEVBUF); -				ccdunlock(cs); -				return (error); -			} -			++lookedup; -		} -		ccd.ccd_cpp = cpp; -		ccd.ccd_vpp = vpp; -		ccd.ccd_ndev = ccio->ccio_ndisks; - -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -		/* -		 * Assign disk index first so that init routine -		 * can use it (saves having the driver drag around -		 * the ccddevice pointer just to set up the dk_* -		 * info in the open routine). -		 */ -		if (dkn < DK_NDRIVE) -			ccd.ccd_dk = dkn++; -		else -			ccd.ccd_dk = -1; -#endif - -		/* -		 * Initialize the ccd.  Fills in the softc for us. -		 */ -		if (error = ccdinit(&ccd, cpp, p)) { -#ifdef WORKING_DISK_STATISTICS		/* XXX !! */ -			if (ccd.ccd_dk >= 0) -				--dkn; -#endif -			for (j = 0; j < lookedup; ++j) -				(void)vn_close(vpp[j], FREAD|FWRITE, -				    p->p_ucred, p); -			bzero(&ccd_softc[unit], sizeof(struct ccd_softc)); -			free(vpp, M_DEVBUF); -			free(cpp, M_DEVBUF); -			ccdunlock(cs); -			return (error); -		} - -		/* -		 * The ccd has been successfully initialized, so -		 * we can place it into the array and read the disklabel. -		 */ -		bcopy(&ccd, &ccddevs[unit], sizeof(ccd)); -		ccio->ccio_unit = unit; -		ccio->ccio_size = cs->sc_size; -		ccdgetdisklabel(dev); - -		ccdunlock(cs); - -		break; - -	case CCDIOCCLR: -		if ((cs->sc_flags & CCDF_INITED) == 0) -			return (ENXIO); - -		if ((flag & FWRITE) == 0) -			return (EBADF); - -		if (error = ccdlock(cs)) -			return (error); - -		/* -		 * Don't unconfigure if any other partitions are open -		 * or if both the character and block flavors of this -		 * partition are open. -		 */ -		part = DISKPART(dev); -		pmask = (1 << part); -		if ((cs->sc_dkdev.dk_openmask & ~pmask) || -		    ((cs->sc_dkdev.dk_bopenmask & pmask) && -		    (cs->sc_dkdev.dk_copenmask & pmask))) { -			ccdunlock(cs); -			return (EBUSY); -		} - -		/* -		 * Free ccd_softc information and clear entry. -		 */ - -		/* Close the components and free their pathnames. */ -		for (i = 0; i < cs->sc_nccdisks; ++i) { -			/* -			 * XXX: this close could potentially fail and -			 * cause Bad Things.  Maybe we need to force -			 * the close to happen? -			 */ -#ifdef DEBUG -			if (ccddebug & CCDB_VNODE) -				vprint("CCDIOCCLR: vnode info", -				    cs->sc_cinfo[i].ci_vp); -#endif -			(void)vn_close(cs->sc_cinfo[i].ci_vp, FREAD|FWRITE, -			    p->p_ucred, p); -			free(cs->sc_cinfo[i].ci_path, M_DEVBUF); -		} - -		/* Free interleave index. */ -		for (i = 0; cs->sc_itable[i].ii_ndisk; ++i) -			free(cs->sc_itable[i].ii_index, M_DEVBUF); - -		/* Free component info and interleave table. */ -		free(cs->sc_cinfo, M_DEVBUF); -		free(cs->sc_itable, M_DEVBUF); -		cs->sc_flags &= ~CCDF_INITED; - -		/* -		 * Free ccddevice information and clear entry. -		 */ -		free(ccddevs[unit].ccd_cpp, M_DEVBUF); -		free(ccddevs[unit].ccd_vpp, M_DEVBUF); -		ccd.ccd_dk = -1; -		bcopy(&ccd, &ccddevs[unit], sizeof(ccd)); - -		/* This must be atomic. */ -		s = splhigh(); -		ccdunlock(cs); -		bzero(cs, sizeof(struct ccd_softc)); -		splx(s); - -		break; - -	case DIOCGDINFO: -		if ((cs->sc_flags & CCDF_INITED) == 0) -			return (ENXIO); - -		*(struct disklabel *)data = cs->sc_dkdev.dk_label; -		break; - -	case DIOCGPART: -		if ((cs->sc_flags & CCDF_INITED) == 0) -			return (ENXIO); - -		((struct partinfo *)data)->disklab = &cs->sc_dkdev.dk_label; -		((struct partinfo *)data)->part = -		    &cs->sc_dkdev.dk_label.d_partitions[DISKPART(dev)]; -		break; - -	case DIOCWDINFO: -	case DIOCSDINFO: -		if ((cs->sc_flags & CCDF_INITED) == 0) -			return (ENXIO); - -		if ((flag & FWRITE) == 0) -			return (EBADF); - -		if (error = ccdlock(cs)) -			return (error); - -		cs->sc_flags |= CCDF_LABELLING; - -		error = setdisklabel(&cs->sc_dkdev.dk_label, -		    (struct disklabel *)data, 0, &cs->sc_dkdev.dk_cpulabel); -		if (error == 0) { -			if (cmd == DIOCWDINFO) -				error = writedisklabel(CCDLABELDEV(dev), -				    ccdstrategy, &cs->sc_dkdev.dk_label, -				    &cs->sc_dkdev.dk_cpulabel); -		} - -		cs->sc_flags &= ~CCDF_LABELLING; - -		ccdunlock(cs); - -		if (error) -			return (error); -		break; - -	case DIOCWLABEL: -		if ((cs->sc_flags & CCDF_INITED) == 0) -			return (ENXIO); - -		if ((flag & FWRITE) == 0) -			return (EBADF); -		if (*(int *)data != 0) -			cs->sc_flags |= CCDF_WLABEL; -		else -			cs->sc_flags &= ~CCDF_WLABEL; -		break; - -	default: -		return (ENOTTY); -	} - -	return (0); -} - -int -ccdsize(dev) -	dev_t dev; -{ -	struct ccd_softc *cs; -	int part, size; - -	if (ccdopen(dev, 0, S_IFBLK, curproc)) -		return (-1); - -	cs = &ccd_softc[ccdunit(dev)]; -	part = DISKPART(dev); - -	if ((cs->sc_flags & CCDF_INITED) == 0) -		return (-1); - -	if (cs->sc_dkdev.dk_label.d_partitions[part].p_fstype != FS_SWAP) -		size = -1; -	else -		size = cs->sc_dkdev.dk_label.d_partitions[part].p_size; - -	if (ccdclose(dev, 0, S_IFBLK, curproc)) -		return (-1); - -	return (size); -} - -int -ccddump(dev, blkno, va, size) -	dev_t dev; -	daddr_t blkno; -	caddr_t va; -	size_t size; -{ - -	/* Not implemented. */ -	return ENXIO; -} - -/* - * Lookup the provided name in the filesystem.  If the file exists, - * is a valid block device, and isn't being used by anyone else, - * set *vpp to the file's vnode. - */ -static int -ccdlookup(path, p, vpp) -	char *path; -	struct proc *p; -	struct vnode **vpp;	/* result */ -{ -	struct nameidata nd; -	struct vnode *vp; -	struct vattr va; -	int error; - -	NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, path, p); -	if (error = vn_open(&nd, FREAD|FWRITE, 0)) { -#ifdef DEBUG -		if (ccddebug & CCDB_FOLLOW|CCDB_INIT) -			printf("ccdlookup: vn_open error = %d\n", error); -#endif -		return (error); -	} -	vp = nd.ni_vp; - -	if (vp->v_usecount > 1) { -		VOP_UNLOCK(vp); -		(void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p); -		return (EBUSY); -	} - -	if (error = VOP_GETATTR(vp, &va, p->p_ucred, p)) { -#ifdef DEBUG -		if (ccddebug & CCDB_FOLLOW|CCDB_INIT) -			printf("ccdlookup: getattr error = %d\n", error); -#endif -		VOP_UNLOCK(vp); -		(void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p); -		return (error); -	} - -	/* XXX: eventually we should handle VREG, too. */ -	if (va.va_type != VBLK) { -		VOP_UNLOCK(vp); -		(void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p); -		return (ENOTBLK); -	} - -#ifdef DEBUG -	if (ccddebug & CCDB_VNODE) -		vprint("ccdlookup: vnode info", vp); -#endif - -	VOP_UNLOCK(vp); -	*vpp = vp; -	return (0); -} - -/* - * Read the disklabel from the ccd.  If one is not present, fake one - * up. - */ -static void -ccdgetdisklabel(dev) -	dev_t dev; -{ -	int unit = ccdunit(dev); -	struct ccd_softc *cs = &ccd_softc[unit]; -	char *errstring; -	struct disklabel *lp = &cs->sc_dkdev.dk_label; -	struct cpu_disklabel *clp = &cs->sc_dkdev.dk_cpulabel; -	struct ccdgeom *ccg = &cs->sc_geom; - -	bzero(lp, sizeof(*lp)); -	bzero(clp, sizeof(*clp)); - -	lp->d_secperunit = cs->sc_size; -	lp->d_secsize = ccg->ccg_secsize; -	lp->d_nsectors = ccg->ccg_nsectors; -	lp->d_ntracks = ccg->ccg_ntracks; -	lp->d_ncylinders = ccg->ccg_ncylinders; -	lp->d_secpercyl = lp->d_ntracks * lp->d_nsectors; - -	strncpy(lp->d_typename, "ccd", sizeof(lp->d_typename)); -	lp->d_type = DTYPE_CCD; -	strncpy(lp->d_packname, "fictitious", sizeof(lp->d_packname)); -	lp->d_rpm = 3600; -	lp->d_interleave = 1; -	lp->d_flags = 0; - -	lp->d_partitions[RAW_PART].p_offset = 0; -	lp->d_partitions[RAW_PART].p_size = cs->sc_size; -	lp->d_partitions[RAW_PART].p_fstype = FS_UNUSED; -	lp->d_npartitions = RAW_PART + 1; - -	lp->d_magic = DISKMAGIC; -	lp->d_magic2 = DISKMAGIC; -	lp->d_checksum = dkcksum(&cs->sc_dkdev.dk_label); - -	/* -	 * Call the generic disklabel extraction routine. -	 */ -	if (errstring = readdisklabel(CCDLABELDEV(dev), ccdstrategy, -	    &cs->sc_dkdev.dk_label, &cs->sc_dkdev.dk_cpulabel)) -		ccdmakedisklabel(cs); - -#ifdef DEBUG -	/* It's actually extremely common to have unlabeled ccds. */ -	if (ccddebug & CCDB_LABEL) -		if (errstring != NULL) -			printf("ccd%d: %s\n", unit, errstring); -#endif -} - -/* - * Take care of things one might want to take care of in the event - * that a disklabel isn't present. - */ -static void -ccdmakedisklabel(cs) -	struct ccd_softc *cs; -{ -	struct disklabel *lp = &cs->sc_dkdev.dk_label; - -	/* -	 * For historical reasons, if there's no disklabel present -	 * the raw partition must be marked FS_BSDFFS. -	 */ -	lp->d_partitions[RAW_PART].p_fstype = FS_BSDFFS; - -	strncpy(lp->d_packname, "default label", sizeof(lp->d_packname)); -} - -/* - * Wait interruptibly for an exclusive lock. - * - * XXX - * Several drivers do this; it should be abstracted and made MP-safe. - */ -static int -ccdlock(cs) -	struct ccd_softc *cs; -{ -	int error; - -	while ((cs->sc_flags & CCDF_LOCKED) != 0) { -		cs->sc_flags |= CCDF_WANTED; -		if ((error = tsleep(cs, PRIBIO | PCATCH, "ccdlck", 0)) != 0) -			return (error); -	} -	cs->sc_flags |= CCDF_LOCKED; -	return (0); -} - -/* - * Unlock and wake up any waiters. - */ -static void -ccdunlock(cs) -	struct ccd_softc *cs; -{ - -	cs->sc_flags &= ~CCDF_LOCKED; -	if ((cs->sc_flags & CCDF_WANTED) != 0) { -		cs->sc_flags &= ~CCDF_WANTED; -		wakeup(cs); -	} -} - -#ifdef DEBUG -static void -printiinfo(ii) -	struct ccdiinfo *ii; -{ -	register int ix, i; - -	for (ix = 0; ii->ii_ndisk; ix++, ii++) { -		printf(" itab[%d]: #dk %d sblk %d soff %d", -		       ix, ii->ii_ndisk, ii->ii_startblk, ii->ii_startoff); -		for (i = 0; i < ii->ii_ndisk; i++) -			printf(" %d", ii->ii_index[i]); -		printf("\n"); -	} -} -#endif diff --git a/sys/i386/ibcs2/ibcs2_dirent.h b/sys/i386/ibcs2/ibcs2_dirent.h deleted file mode 100644 index f93e3a93c5a2d..0000000000000 --- a/sys/i386/ibcs2/ibcs2_dirent.h +++ /dev/null @@ -1,57 +0,0 @@ -/*	$NetBSD: ibcs2_dirent.h,v 1.2 1994/10/26 02:52:51 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#ifndef _IBCS2_DIRENT_H -#define _IBCS2_DIRENT_H 1 - -#include <compat/ibcs2/ibcs2_types.h> - -#define IBCS2_MAXNAMLEN		512 -#define IBCS2_DIRBUF		1048 - -typedef struct { -	int	dd_fd; -	int	dd_loc; -	int	dd_size; -	char	*dd_buf; -} IBCS2_DIR; - -struct ibcs2_dirent { -	ibcs2_ino_t	d_ino; -	short		d_pad; -	ibcs2_off_t	d_off; -	u_short		d_reclen; -	char		d_name[1]; -}; - -#endif /* _IBCS2_DIRENT_H */ diff --git a/sys/i386/ibcs2/ibcs2_errno.c b/sys/i386/ibcs2/ibcs2_errno.c deleted file mode 100644 index 48cb88eb9c163..0000000000000 --- a/sys/i386/ibcs2/ibcs2_errno.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * ibcs2_errno.c - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <compat/ibcs2/ibcs2_errno.h> - -int bsd2ibcs_errno[] = { -	0,			/* 0 */ -	IBCS2_EPERM,		/* 1 */ -	IBCS2_ENOENT,		/* 2 */ -	IBCS2_ESRCH,		/* 3 */ -	IBCS2_EINTR,		/* 4 */ -	IBCS2_EIO,		/* 5 */ -	IBCS2_ENXIO,		/* 6 */ -	IBCS2_E2BIG,		/* 7 */ -	IBCS2_ENOEXEC,		/* 8 */ -	IBCS2_EBADF,		/* 9 */ -	IBCS2_ECHILD,		/* 10 */ -	IBCS2_EDEADLK,		/* 11 */ -	IBCS2_ENOMEM,		/* 12 */ -	IBCS2_EACCES,		/* 13 */ -	IBCS2_EFAULT,		/* 14 */ -	IBCS2_ENOTBLK,		/* 15 */ -	IBCS2_EBUSY,		/* 16 */ -	IBCS2_EEXIST,		/* 17 */ -	IBCS2_EXDEV,		/* 18 */ -	IBCS2_ENODEV,		/* 19 */ -	IBCS2_ENOTDIR,		/* 20 */ -	IBCS2_EISDIR,		/* 21 */ -	IBCS2_EINVAL,		/* 22 */ -	IBCS2_ENFILE,		/* 23 */ -	IBCS2_EMFILE,		/* 24 */ -	IBCS2_ENOTTY,		/* 25 */ -	IBCS2_ETXTBSY,		/* 26 */ -	IBCS2_EFBIG,		/* 27 */ -	IBCS2_ENOSPC,		/* 28 */ -	IBCS2_ESPIPE,		/* 29 */ -	IBCS2_EROFS,		/* 30 */ -	IBCS2_EMLINK,		/* 31 */ -	IBCS2_EPIPE,		/* 32 */ -	IBCS2_EDOM,		/* 33 */ -	IBCS2_ERANGE,		/* 34 */ -	IBCS2_EAGAIN,		/* 35 */ -	IBCS2_EINPROGRESS,	/* 36 */ -	IBCS2_EALREADY,		/* 37 */ -	IBCS2_ENOTSOCK,		/* 38 */ -	IBCS2_EDESTADDRREQ,	/* 39 */ -	IBCS2_EMSGSIZE,		/* 40 */ -	IBCS2_EPROTOTYPE,	/* 41 */ -	IBCS2_ENOPROTOOPT,	/* 42 */ -	IBCS2_EPROTONOSUPPORT,	/* 43 */ -	IBCS2_ESOCKTNOSUPPORT,	/* 44 */ -	IBCS2_EOPNOTSUPP,	/* 45 */ -	IBCS2_EPFNOSUPPORT,	/* 46 */ -	IBCS2_EAFNOSUPPORT,	/* 47 */ -	IBCS2_EADDRINUSE,	/* 48 */ -	IBCS2_EADDRNOTAVAIL,	/* 49 */ -	IBCS2_ENETDOWN,		/* 50 */ -	IBCS2_ENETUNREACH,	/* 51 */ -	IBCS2_ENETRESET,	/* 52 */ -	IBCS2_ECONNABORTED,	/* 53 */ -	IBCS2_ECONNRESET,	/* 54 */ -	IBCS2_ENOBUFS,		/* 55 */ -	IBCS2_EISCONN,		/* 56 */ -	IBCS2_ENOTCONN,		/* 57 */ -	IBCS2_ESHUTDOWN,	/* 58 */ -	IBCS2_ETOOMANYREFS,	/* 59 */ -	IBCS2_ETIMEDOUT,	/* 60 */ -	IBCS2_ECONNREFUSED,	/* 61 */ -	IBCS2_ELOOP,		/* 62 */ -	IBCS2_ENAMETOOLONG,	/* 63 */ -	IBCS2_EHOSTDOWN,	/* 64 */ -	IBCS2_EHOSTUNREACH,	/* 65 */ -	IBCS2_ENOTEMPTY,	/* 66 */ -	0,			/* 67 */ -	0,			/* 68 */ -	0,			/* 69 */ -	IBCS2_ESTALE,		/* 70 */ -	IBCS2_EREMOTE,		/* 71 */ -	0,			/* 72 */ -	0,			/* 73 */ -	0,			/* 74 */ -	0,			/* 75 */ -	0,			/* 76 */ -	IBCS2_ENOLCK,		/* 77 */ -	IBCS2_ENOSYS,		/* 78 */ -	0,			/* 79 */ -	0,			/* 80 */ -	0,			/* 81 */ -}; - diff --git a/sys/i386/ibcs2/ibcs2_errno.h b/sys/i386/ibcs2/ibcs2_errno.h deleted file mode 100644 index 30ed8241ae284..0000000000000 --- a/sys/i386/ibcs2/ibcs2_errno.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * ibcs2_errno.h - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _IBCS2_ERRNO_H -#define _IBCS2_ERRNO_H - -#define _SCO_NET 1 - -#define IBCS2_EPERM		1 -#define IBCS2_ENOENT		2 -#define IBCS2_ESRCH		3 -#define IBCS2_EINTR		4 -#define IBCS2_EIO		5 -#define IBCS2_ENXIO		6 -#define IBCS2_E2BIG		7 -#define IBCS2_ENOEXEC		8 -#define IBCS2_EBADF		9 -#define IBCS2_ECHILD		10 -#define IBCS2_EAGAIN		11 -#define IBCS2_ENOMEM		12 -#define IBCS2_EACCES		13 -#define IBCS2_EFAULT		14 -#define IBCS2_ENOTBLK		15 -#define IBCS2_EBUSY		16 -#define IBCS2_EEXIST		17 -#define IBCS2_EXDEV		18 -#define IBCS2_ENODEV		19 -#define IBCS2_ENOTDIR		20 -#define IBCS2_EISDIR		21 -#define IBCS2_EINVAL		22 -#define IBCS2_ENFILE		23 -#define IBCS2_EMFILE		24 -#define IBCS2_ENOTTY		25 -#define IBCS2_ETXTBSY		26 -#define IBCS2_EFBIG		27 -#define IBCS2_ENOSPC		28 -#define IBCS2_ESPIPE		29 -#define IBCS2_EROFS		30 -#define IBCS2_EMLINK		31 -#define IBCS2_EPIPE		32 -#define IBCS2_EDOM		33 -#define IBCS2_ERANGE		34 -#define IBCS2_ENOMSG		35 -#define IBCS2_EIDRM		36 -#define IBCS2_ECHRNG		37 -#define IBCS2_EL2NSYNC		38 -#define IBCS2_EL3HLT		39 -#define IBCS2_EL3RST		40 -#define IBCS2_ELNRNG		41 -#define IBCS2_EUNATCH		42 -#define IBCS2_ENOCSI		43 -#define IBCS2_EL2HLT		44 -#define IBCS2_EDEADLK		45 -#define IBCS2_ENOLCK		46 -#define IBCS2_ENOSTR		60 -#define IBCS2_ENODATA		61 -#define IBCS2_ETIME		62 -#define IBCS2_ENOSR		63 -#define IBCS2_ENONET		64 -#define IBCS2_ENOPKG		65 -#define IBCS2_EREMOTE		66 -#define IBCS2_ENOLINK		67 -#define IBCS2_EADV		68 -#define IBCS2_ESRMNT		69 -#define IBCS2_ECOMM		70 -#define IBCS2_EPROTO		71 -#define IBCS2_EMULTIHOP		74 -#define IBCS2_ELBIN		75 -#define IBCS2_EDOTDOT		76 -#define IBCS2_EBADMSG		77 -#define IBCS2_ENAMETOOLONG	78 -#define IBCS2_EOVERFLOW		79 -#define IBCS2_ENOTUNIQ		80 -#define IBCS2_EBADFD		81 -#define IBCS2_EREMCHG		82 -#define IBCS2_EILSEQ		88 -#define IBCS2_ENOSYS		89 - -#if defined(_SCO_NET)			/* not strict iBCS2 */ -#define IBCS2_EWOULDBLOCK	90 -#define IBCS2_EINPROGRESS	91 -#define IBCS2_EALREADY		92 -#define IBCS2_ENOTSOCK		93 -#define IBCS2_EDESTADDRREQ	94 -#define IBCS2_EMSGSIZE		95 -#define IBCS2_EPROTOTYPE	96 -#define IBCS2_EPROTONOSUPPORT	97 -#define IBCS2_ESOCKTNOSUPPORT	98 -#define IBCS2_EOPNOTSUPP	99 -#define IBCS2_EPFNOSUPPORT	100 -#define IBCS2_EAFNOSUPPORT	101 -#define IBCS2_EADDRINUSE	102 -#define IBCS2_EADDRNOTAVAIL	103 -#define IBCS2_ENETDOWN		104 -#define IBCS2_ENETUNREACH	105 -#define IBCS2_ENETRESET		106 -#define IBCS2_ECONNABORTED	107 -#define IBCS2_ECONNRESET	108 -#define IBCS2_ENOBUFS		IBCS2_ENOSR -#define IBCS2_EISCONN		110 -#define IBCS2_ENOTCONN		111 -#define IBCS2_ESHUTDOWN		112 -#define IBCS2_ETOOMANYREFS	113 -#define IBCS2_ETIMEDOUT		114 -#define IBCS2_ECONNREFUSED	115 -#define IBCS2_EHOSTDOWN		116 -#define IBCS2_EHOSTUNREACH	117 -#define IBCS2_ENOPROTOOPT	118 -#define IBCS2_ENOTEMPTY		145 -#define IBCS2_ELOOP		150 -#else -#define IBCS2_ELOOP		90 -#define IBCS2_EWOULDBLOCK	90 -#define IBCS2_ERESTART		91 -#define IBCS2_ESTRPIPE		92 -#define IBCS2_ENOTEMPTY		93 -#define IBCS2_EUSERS		94 -#endif - -#define IBCS2_ESTALE		151 -#define IBCS2_EIORESID		500 - -extern int bsd2ibcs_errno[]; - -#endif /* _IBCS2_ERRNO_H */ diff --git a/sys/i386/ibcs2/ibcs2_fcntl.c b/sys/i386/ibcs2/ibcs2_fcntl.c deleted file mode 100644 index 4dede8c15b52c..0000000000000 --- a/sys/i386/ibcs2/ibcs2_fcntl.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/kernel.h> -#include <sys/mount.h> -#include <sys/malloc.h> -#include <sys/syscallargs.h> - -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_fcntl.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> -#include <compat/ibcs2/ibcs2_util.h> - - -static int -cvt_o_flags(flags) -	int flags; -{ -	int r = 0; - -        /* convert mode into NetBSD mode */ -	if (flags & IBCS2_O_WRONLY) r |= O_WRONLY; -	if (flags & IBCS2_O_RDWR) r |= O_RDWR; -	if (flags & (IBCS2_O_NDELAY | IBCS2_O_NONBLOCK)) r |= O_NONBLOCK; -	if (flags & IBCS2_O_APPEND) r |= O_APPEND; -	if (flags & IBCS2_O_SYNC) r |= O_FSYNC; -	if (flags & IBCS2_O_CREAT) r |= O_CREAT; -	if (flags & IBCS2_O_TRUNC) r |= O_TRUNC; -	if (flags & IBCS2_O_EXCL) r |= O_EXCL; -	return r; -} - -static void -cvt_flock2iflock(flp, iflp) -	struct flock *flp; -	struct ibcs2_flock *iflp; -{ -	switch (flp->l_type) { -	case F_RDLCK: -		iflp->l_type = IBCS2_F_RDLCK; -		break; -	case F_WRLCK: -		iflp->l_type = IBCS2_F_WRLCK; -		break; -	case F_UNLCK: -		iflp->l_type = IBCS2_F_UNLCK; -		break; -	} -	iflp->l_whence = (short)flp->l_whence; -	iflp->l_start = (ibcs2_off_t)flp->l_start; -	iflp->l_len = (ibcs2_off_t)flp->l_len; -	iflp->l_sysid = 0; -	iflp->l_pid = (ibcs2_pid_t)flp->l_pid; -} - -static void -cvt_iflock2flock(iflp, flp) -	struct ibcs2_flock *iflp; -	struct flock *flp; -{ -	flp->l_start = (off_t)iflp->l_start; -	flp->l_len = (off_t)iflp->l_len; -	flp->l_pid = (pid_t)iflp->l_pid; -	switch (iflp->l_type) { -	case IBCS2_F_RDLCK: -		flp->l_type = F_RDLCK; -		break; -	case IBCS2_F_WRLCK: -		flp->l_type = F_WRLCK; -		break; -	case IBCS2_F_UNLCK: -		flp->l_type = F_UNLCK; -		break; -	} -	flp->l_whence = iflp->l_whence; -} - -/* convert iBCS2 mode into NetBSD mode */ -static int -ioflags2oflags(flags) -	int flags; -{ -	int r = 0; -	 -	if (flags & IBCS2_O_RDONLY) r |= O_RDONLY; -	if (flags & IBCS2_O_WRONLY) r |= O_WRONLY; -	if (flags & IBCS2_O_RDWR) r |= O_RDWR; -	if (flags & IBCS2_O_NDELAY) r |= O_NONBLOCK; -	if (flags & IBCS2_O_APPEND) r |= O_APPEND; -	if (flags & IBCS2_O_SYNC) r |= O_FSYNC; -	if (flags & IBCS2_O_NONBLOCK) r |= O_NONBLOCK; -	if (flags & IBCS2_O_CREAT) r |= O_CREAT; -	if (flags & IBCS2_O_TRUNC) r |= O_TRUNC; -	if (flags & IBCS2_O_EXCL) r |= O_EXCL; -	if (flags & IBCS2_O_NOCTTY) r |= O_NOCTTY; -	return r; -} - -/* convert NetBSD mode into iBCS2 mode */ -static int -oflags2ioflags(flags) -	int flags; -{ -	int r = 0; -	 -	if (flags & O_RDONLY) r |= IBCS2_O_RDONLY; -	if (flags & O_WRONLY) r |= IBCS2_O_WRONLY; -	if (flags & O_RDWR) r |= IBCS2_O_RDWR; -	if (flags & O_NDELAY) r |= IBCS2_O_NONBLOCK; -	if (flags & O_APPEND) r |= IBCS2_O_APPEND; -	if (flags & O_FSYNC) r |= IBCS2_O_SYNC; -	if (flags & O_NONBLOCK) r |= IBCS2_O_NONBLOCK; -	if (flags & O_CREAT) r |= IBCS2_O_CREAT; -	if (flags & O_TRUNC) r |= IBCS2_O_TRUNC; -	if (flags & O_EXCL) r |= IBCS2_O_EXCL; -	if (flags & O_NOCTTY) r |= IBCS2_O_NOCTTY; -	return r; -} - -int -ibcs2_open(p, uap, retval) -	struct proc *p; -	struct ibcs2_open_args *uap; -	int *retval; -{ -	int noctty = SCARG(uap, flags) & IBCS2_O_NOCTTY; -	int ret; -	caddr_t sg = stackgap_init(); - -	SCARG(uap, flags) = cvt_o_flags(SCARG(uap, flags)); -	if (SCARG(uap, flags) & O_CREAT) -		CHECKALTCREAT(p, &sg, SCARG(uap, path)); -	else -		CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	ret = open(p, uap, retval); - -	if (!ret && !noctty && SESS_LEADER(p) && !(p->p_flag & P_CONTROLT)) { -		struct filedesc *fdp = p->p_fd; -		struct file *fp = fdp->fd_ofiles[*retval]; - -		/* ignore any error, just give it a try */ -		if (fp->f_type == DTYPE_VNODE) -			(fp->f_ops->fo_ioctl)(fp, TIOCSCTTY, (caddr_t) 0, p); -	} -	return ret; -} - -int -ibcs2_creat(p, uap, retval) -        struct proc *p;   -	struct ibcs2_creat_args *uap; -	int *retval; -{        -	struct open_args cup;    -	caddr_t sg = stackgap_init(); - -	CHECKALTCREAT(p, &sg, SCARG(uap, path)); -	SCARG(&cup, path) = SCARG(uap, path); -	SCARG(&cup, mode) = SCARG(uap, mode); -	SCARG(&cup, flags) = O_WRONLY | O_CREAT | O_TRUNC; -	return open(p, &cup, retval); -}        - -int -ibcs2_access(p, uap, retval) -        struct proc *p; -        struct ibcs2_access_args *uap; -        int *retval; -{ -        struct access_args cup; -        caddr_t sg = stackgap_init(); - -        CHECKALTEXIST(p, &sg, SCARG(uap, path)); -        SCARG(&cup, path) = SCARG(uap, path); -        SCARG(&cup, flags) = SCARG(uap, flags); -        return access(p, &cup, retval); -} - -int -ibcs2_fcntl(p, uap, retval) -	struct proc *p; -	struct ibcs2_fcntl_args *uap; -	int *retval; -{ -	int error; -	struct fcntl_args fa; -	struct flock *flp; -	struct ibcs2_flock ifl; -	 -	switch(SCARG(uap, cmd)) { -	case IBCS2_F_DUPFD: -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_DUPFD; -		SCARG(&fa, arg) = SCARG(uap, arg); -		return fcntl(p, &fa, retval); -	case IBCS2_F_GETFD: -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_GETFD; -		SCARG(&fa, arg) = SCARG(uap, arg); -		return fcntl(p, &fa, retval); -	case IBCS2_F_SETFD: -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_SETFD; -		SCARG(&fa, arg) = SCARG(uap, arg); -		return fcntl(p, &fa, retval); -	case IBCS2_F_GETFL: -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_GETFL; -		SCARG(&fa, arg) = SCARG(uap, arg); -		error = fcntl(p, &fa, retval); -		if (error) -			return error; -		*retval = oflags2ioflags(*retval); -		return error; -	case IBCS2_F_SETFL: -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_SETFL; -		SCARG(&fa, arg) = (void *)ioflags2oflags(SCARG(uap, arg)); -		return fcntl(p, &fa, retval); - -	case IBCS2_F_GETLK: -	    { -		caddr_t sg = stackgap_init(); -		flp = stackgap_alloc(&sg, sizeof(*flp)); -		error = copyin((caddr_t)SCARG(uap, arg), (caddr_t)&ifl, -			       ibcs2_flock_len); -		if (error) -			return error; -		cvt_iflock2flock(&ifl, flp); -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_GETLK; -		SCARG(&fa, arg) = (void *)flp; -		error = fcntl(p, &fa, retval); -		if (error) -			return error; -		cvt_flock2iflock(flp, &ifl); -		return copyout((caddr_t)&ifl, (caddr_t)SCARG(uap, arg), -			       ibcs2_flock_len); -	    } - -	case IBCS2_F_SETLK: -	    { -		caddr_t sg = stackgap_init(); -		flp = stackgap_alloc(&sg, sizeof(*flp)); -		error = copyin((caddr_t)SCARG(uap, arg), (caddr_t)&ifl, -			       ibcs2_flock_len); -		if (error) -			return error; -		cvt_iflock2flock(&ifl, flp); -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_SETLK; -		SCARG(&fa, arg) = (void *)flp; -		return fcntl(p, &fa, retval); -	    } - -	case IBCS2_F_SETLKW: -	    { -		caddr_t sg = stackgap_init(); -		flp = stackgap_alloc(&sg, sizeof(*flp)); -		error = copyin((caddr_t)SCARG(uap, arg), (caddr_t)&ifl, -			       ibcs2_flock_len); -		if (error) -			return error; -		cvt_iflock2flock(&ifl, flp); -		SCARG(&fa, fd) = SCARG(uap, fd); -		SCARG(&fa, cmd) = F_SETLKW; -		SCARG(&fa, arg) = (void *)flp; -		return fcntl(p, &fa, retval); -	    } -	} -	return ENOSYS; -} diff --git a/sys/i386/ibcs2/ibcs2_fcntl.h b/sys/i386/ibcs2/ibcs2_fcntl.h deleted file mode 100644 index b75537cb66f5f..0000000000000 --- a/sys/i386/ibcs2/ibcs2_fcntl.h +++ /dev/null @@ -1,76 +0,0 @@ -/*	$NetBSD: ibcs2_fcntl.h,v 1.2 1994/10/26 02:52:54 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _IBCS2_FCNTL_H -#define _IBCS2_FCNTL_H 1 - -#include <compat/ibcs2/ibcs2_types.h> - -#define IBCS2_O_RDONLY		0x0000 -#define IBCS2_O_WRONLY		0x0001 -#define IBCS2_O_RDWR		0x0002 -#define IBCS2_O_NDELAY		0x0004 -#define IBCS2_O_APPEND		0x0008 -#define IBCS2_O_SYNC		0x0010 -#define IBCS2_O_NONBLOCK	0x0080 -#define IBCS2_O_CREAT		0x0100 -#define IBCS2_O_TRUNC		0x0200 -#define IBCS2_O_EXCL		0x0400 -#define IBCS2_O_NOCTTY		0x0800 - -#define IBCS2_F_DUPFD         0 -#define IBCS2_F_GETFD         1 -#define IBCS2_F_SETFD         2 -#define IBCS2_F_GETFL         3 -#define IBCS2_F_SETFL         4 -#define IBCS2_F_GETLK         5 -#define IBCS2_F_SETLK         6 -#define IBCS2_F_SETLKW        7 - -struct ibcs2_flock { -        short   	l_type; -        short   	l_whence; -        ibcs2_off_t	l_start; -        ibcs2_off_t	l_len; -        short   	l_sysid; -        ibcs2_pid_t	l_pid; -}; -#define ibcs2_flock_len	(sizeof(struct ibcs2_flock)) - -#define IBCS2_F_RDLCK		1 -#define IBCS2_F_WRLCK		2 -#define IBCS2_F_UNLCK		3 - -#define IBCS2_O_ACCMODE		3 -#define IBCS2_FD_CLOEXEC	1 - -#endif /* _IBCS2_FCNTL_H */ diff --git a/sys/i386/ibcs2/ibcs2_ioctl.c b/sys/i386/ibcs2/ibcs2_ioctl.c deleted file mode 100644 index 9b45f50527cc6..0000000000000 --- a/sys/i386/ibcs2/ibcs2_ioctl.c +++ /dev/null @@ -1,487 +0,0 @@ -/*	$NetBSD: ibcs2_ioctl.c,v 1.6 1995/03/14 15:12:28 scottb Exp $	*/ - -/* - * Copyright (c) 1994, 1995 Scott Bartram - * All rights reserved. - * - * based on compat/sunos/sun_ioctl.c - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/dir.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/mbuf.h> -#include <sys/mman.h> -#include <sys/mount.h> -#include <sys/reboot.h> -#include <sys/resource.h> -#include <sys/resourcevar.h> -#include <sys/signal.h> -#include <sys/signalvar.h> -#include <sys/socket.h> -#include <sys/termios.h> -#include <sys/time.h> -#include <sys/times.h> -#include <sys/tty.h> -#include <sys/vnode.h> -#include <sys/uio.h> -#include <sys/wait.h> -#include <sys/utsname.h> -#include <sys/unistd.h> - -#include <net/if.h> -#include <sys/syscallargs.h> - -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_socksys.h> -#include <compat/ibcs2/ibcs2_stropts.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> -#include <compat/ibcs2/ibcs2_termios.h> -#include <compat/ibcs2/ibcs2_util.h> - -/* - * iBCS2 ioctl calls. - */ - -static struct speedtab sptab[] = { -	{ 0, 0 }, -	{ 50, 1 }, -	{ 75, 2 }, -	{ 110, 3 }, -	{ 134, 4 }, -	{ 135, 4 }, -	{ 150, 5 }, -	{ 200, 6 }, -	{ 300, 7 }, -	{ 600, 8 }, -	{ 1200, 9 }, -	{ 1800, 10 }, -	{ 2400, 11 }, -	{ 4800, 12 }, -	{ 9600, 13 }, -	{ 19200, 14 }, -	{ 38400, 15 }, -	{ -1, -1 } -}; - -static u_long s2btab[] = {  -	0, -	50, -	75, -	110, -	134, -	150, -	200, -	300, -	600, -	1200, -	1800, -	2400, -	4800, -	9600, -	19200, -	38400, -}; - -static void -stios2btios(st, bt) -	struct ibcs2_termios *st; -	struct termios *bt; -{ -	register u_long l, r; - -	l = st->c_iflag;	r = 0; -	if (l & IBCS2_IGNBRK)	r |= IGNBRK; -	if (l & IBCS2_BRKINT)	r |= BRKINT; -	if (l & IBCS2_IGNPAR)	r |= IGNPAR; -	if (l & IBCS2_PARMRK)	r |= PARMRK; -	if (l & IBCS2_INPCK)	r |= INPCK; -	if (l & IBCS2_ISTRIP)	r |= ISTRIP; -	if (l & IBCS2_INLCR)	r |= INLCR; -	if (l & IBCS2_IGNCR)	r |= IGNCR; -	if (l & IBCS2_ICRNL)	r |= ICRNL; -	if (l & IBCS2_IXON)	r |= IXON; -	if (l & IBCS2_IXANY)	r |= IXANY; -	if (l & IBCS2_IXOFF)	r |= IXOFF; -	if (l & IBCS2_IMAXBEL)	r |= IMAXBEL; -	bt->c_iflag = r; - -	l = st->c_oflag;	r = 0; -	if (l & IBCS2_OPOST)	r |= OPOST; -	if (l & IBCS2_ONLCR)	r |= ONLCR; -	if (l & IBCS2_TAB3)	r |= OXTABS; -	bt->c_oflag = r; - -	l = st->c_cflag;	r = 0; -	switch (l & IBCS2_CSIZE) { -	case IBCS2_CS5:		r |= CS5; break; -	case IBCS2_CS6:		r |= CS6; break; -	case IBCS2_CS7:		r |= CS7; break; -	case IBCS2_CS8:		r |= CS8; break; -	} -	if (l & IBCS2_CSTOPB)	r |= CSTOPB; -	if (l & IBCS2_CREAD)	r |= CREAD; -	if (l & IBCS2_PARENB)	r |= PARENB; -	if (l & IBCS2_PARODD)	r |= PARODD; -	if (l & IBCS2_HUPCL)	r |= HUPCL; -	if (l & IBCS2_CLOCAL)	r |= CLOCAL; -	bt->c_cflag = r; - -	l = st->c_lflag;	r = 0; -	if (l & IBCS2_ISIG)	r |= ISIG; -	if (l & IBCS2_ICANON)	r |= ICANON; -	if (l & IBCS2_ECHO)	r |= ECHO; -	if (l & IBCS2_ECHOE)	r |= ECHOE; -	if (l & IBCS2_ECHOK)	r |= ECHOK; -	if (l & IBCS2_ECHONL)	r |= ECHONL; -	if (l & IBCS2_NOFLSH)	r |= NOFLSH; -	if (l & IBCS2_TOSTOP)	r |= TOSTOP; -	bt->c_lflag = r; - -	bt->c_ispeed = bt->c_ospeed = s2btab[l & 0x0000000f]; - -	bt->c_cc[VINTR]	= -	    st->c_cc[IBCS2_VINTR]  ? st->c_cc[IBCS2_VINTR]  : _POSIX_VDISABLE; -	bt->c_cc[VQUIT] = -	    st->c_cc[IBCS2_VQUIT]  ? st->c_cc[IBCS2_VQUIT]  : _POSIX_VDISABLE; -	bt->c_cc[VERASE] = -	    st->c_cc[IBCS2_VERASE] ? st->c_cc[IBCS2_VERASE] : _POSIX_VDISABLE; -	bt->c_cc[VKILL] = -	    st->c_cc[IBCS2_VKILL]  ? st->c_cc[IBCS2_VKILL]  : _POSIX_VDISABLE; -	bt->c_cc[VEOF] = -	    st->c_cc[IBCS2_VEOF]   ? st->c_cc[IBCS2_VEOF]   : _POSIX_VDISABLE; -	bt->c_cc[VEOL] = -	    st->c_cc[IBCS2_VEOL]   ? st->c_cc[IBCS2_VEOL]   : _POSIX_VDISABLE; -	bt->c_cc[VEOL2] = -	    st->c_cc[IBCS2_VEOL2]  ? st->c_cc[IBCS2_VEOL2]  : _POSIX_VDISABLE; -#if 0 -	bt->c_cc[VSWTCH] = -	    st->c_cc[IBCS2_VSWTCH] ? st->c_cc[IBCS2_VSWTCH] : _POSIX_VDISABLE; -#endif -	bt->c_cc[VSTART] = -	    st->c_cc[IBCS2_VSTART] ? st->c_cc[IBCS2_VSTART] : _POSIX_VDISABLE; -	bt->c_cc[VSTOP] = -	    st->c_cc[IBCS2_VSTOP]  ? st->c_cc[IBCS2_VSTOP]  : _POSIX_VDISABLE; -	bt->c_cc[VSUSP] = -	    st->c_cc[IBCS2_VSUSP]  ? st->c_cc[IBCS2_VSUSP]  : _POSIX_VDISABLE; -	bt->c_cc[VDSUSP]   = _POSIX_VDISABLE; -	bt->c_cc[VREPRINT] = _POSIX_VDISABLE; -	bt->c_cc[VDISCARD] = _POSIX_VDISABLE; -	bt->c_cc[VWERASE]  = _POSIX_VDISABLE; -	bt->c_cc[VLNEXT]   = _POSIX_VDISABLE; -	bt->c_cc[VSTATUS]  = _POSIX_VDISABLE; -} - -static void -btios2stios(bt, st) -	struct termios *bt; -	struct ibcs2_termios *st; -{ -	register u_long l, r; - -	l = bt->c_iflag;	r = 0; -	if (l & IGNBRK)		r |= IBCS2_IGNBRK; -	if (l & BRKINT)		r |= IBCS2_BRKINT; -	if (l & IGNPAR)		r |= IBCS2_IGNPAR; -	if (l & PARMRK)		r |= IBCS2_PARMRK; -	if (l & INPCK)		r |= IBCS2_INPCK; -	if (l & ISTRIP)		r |= IBCS2_ISTRIP; -	if (l & INLCR)		r |= IBCS2_INLCR; -	if (l & IGNCR)		r |= IBCS2_IGNCR; -	if (l & ICRNL)		r |= IBCS2_ICRNL; -	if (l & IXON)		r |= IBCS2_IXON; -	if (l & IXANY)		r |= IBCS2_IXANY; -	if (l & IXOFF)		r |= IBCS2_IXOFF; -	if (l & IMAXBEL)	r |= IBCS2_IMAXBEL; -	st->c_iflag = r; - -	l = bt->c_oflag;	r = 0; -	if (l & OPOST)		r |= IBCS2_OPOST; -	if (l & ONLCR)		r |= IBCS2_ONLCR; -	if (l & OXTABS)		r |= IBCS2_TAB3; -	st->c_oflag = r; - -	l = bt->c_cflag;	r = 0; -	switch (l & CSIZE) { -	case CS5:		r |= IBCS2_CS5; break; -	case CS6:		r |= IBCS2_CS6; break; -	case CS7:		r |= IBCS2_CS7; break; -	case CS8:		r |= IBCS2_CS8; break; -	} -	if (l & CSTOPB)		r |= IBCS2_CSTOPB; -	if (l & CREAD)		r |= IBCS2_CREAD; -	if (l & PARENB)		r |= IBCS2_PARENB; -	if (l & PARODD)		r |= IBCS2_PARODD; -	if (l & HUPCL)		r |= IBCS2_HUPCL; -	if (l & CLOCAL)		r |= IBCS2_CLOCAL; -	st->c_cflag = r; - -	l = bt->c_lflag;	r = 0; -	if (l & ISIG)		r |= IBCS2_ISIG; -	if (l & ICANON)		r |= IBCS2_ICANON; -	if (l & ECHO)		r |= IBCS2_ECHO; -	if (l & ECHOE)		r |= IBCS2_ECHOE; -	if (l & ECHOK)		r |= IBCS2_ECHOK; -	if (l & ECHONL)		r |= IBCS2_ECHONL; -	if (l & NOFLSH)		r |= IBCS2_NOFLSH; -	if (l & TOSTOP)		r |= IBCS2_TOSTOP; -	st->c_lflag = r; - -	l = ttspeedtab(bt->c_ospeed, sptab); -	if (l >= 0) -		st->c_cflag |= l; - -	st->c_cc[IBCS2_VINTR] = -	    bt->c_cc[VINTR]  != _POSIX_VDISABLE ? bt->c_cc[VINTR]  : 0; -	st->c_cc[IBCS2_VQUIT] = -	    bt->c_cc[VQUIT]  != _POSIX_VDISABLE ? bt->c_cc[VQUIT]  : 0; -	st->c_cc[IBCS2_VERASE] = -	    bt->c_cc[VERASE] != _POSIX_VDISABLE ? bt->c_cc[VERASE] : 0; -	st->c_cc[IBCS2_VKILL] = -	    bt->c_cc[VKILL]  != _POSIX_VDISABLE ? bt->c_cc[VKILL]  : 0; -	st->c_cc[IBCS2_VEOF] = -	    bt->c_cc[VEOF]   != _POSIX_VDISABLE ? bt->c_cc[VEOF]   : 0; -	st->c_cc[IBCS2_VEOL] = -	    bt->c_cc[VEOL]   != _POSIX_VDISABLE ? bt->c_cc[VEOL]   : 0; -	st->c_cc[IBCS2_VEOL2] = -	    bt->c_cc[VEOL2]  != _POSIX_VDISABLE ? bt->c_cc[VEOL2]  : 0; -	st->c_cc[IBCS2_VSWTCH] = -	    0; -	st->c_cc[IBCS2_VSUSP] = -	    bt->c_cc[VSUSP]  != _POSIX_VDISABLE ? bt->c_cc[VSUSP]  : 0; -	st->c_cc[IBCS2_VSTART] = -	    bt->c_cc[VSTART] != _POSIX_VDISABLE ? bt->c_cc[VSTART] : 0; -	st->c_cc[IBCS2_VSTOP] = -	    bt->c_cc[VSTOP]  != _POSIX_VDISABLE ? bt->c_cc[VSTOP]  : 0; - -	st->c_line = 0; -} - -static void -stios2stio(ts, t) -	struct ibcs2_termios *ts; -	struct ibcs2_termio *t; -{ -	t->c_iflag = ts->c_iflag; -	t->c_oflag = ts->c_oflag; -	t->c_cflag = ts->c_cflag; -	t->c_lflag = ts->c_lflag; -	t->c_line  = ts->c_line; -	bcopy(ts->c_cc, t->c_cc, IBCS2_NCC); -} - -static void -stio2stios(t, ts) -	struct ibcs2_termio *t; -	struct ibcs2_termios *ts; -{ -	ts->c_iflag = t->c_iflag; -	ts->c_oflag = t->c_oflag; -	ts->c_cflag = t->c_cflag; -	ts->c_lflag = t->c_lflag; -	ts->c_line  = t->c_line; -	bcopy(t->c_cc, ts->c_cc, IBCS2_NCC); -} - -int -ibcs2_ioctl(p, uap, retval) -	struct proc *p; -	struct ibcs2_ioctl_args *uap; -	int *retval; -{ -	struct filedesc *fdp = p->p_fd; -	struct file *fp; -	int (*ctl)(); -	int error; - -	if (SCARG(uap, fd) < 0 || SCARG(uap, fd) >= fdp->fd_nfiles || -	    (fp = fdp->fd_ofiles[SCARG(uap, fd)]) == NULL) { -		DPRINTF(("ibcs2_ioctl(%d): bad fd %d ", p->p_pid, -			 SCARG(uap, fd))); -		return EBADF; -	} - -	if ((fp->f_flag & (FREAD|FWRITE)) == 0) { -		DPRINTF(("ibcs2_ioctl(%d): bad fp flag ", p->p_pid)); -		return EBADF; -	} - -	ctl = fp->f_ops->fo_ioctl; - -	switch (SCARG(uap, cmd)) { -	case IBCS2_TCGETA: -	case IBCS2_XCGETA: -	case IBCS2_OXCGETA: -	    { -		struct termios bts; -		struct ibcs2_termios sts; -		struct ibcs2_termio st; -	 -		if ((error = (*ctl)(fp, TIOCGETA, (caddr_t)&bts, p)) != 0) -			return error; -	 -		btios2stios (&bts, &sts); -		if (SCARG(uap, cmd) == IBCS2_TCGETA) { -			stios2stio (&sts, &st); -			error = copyout((caddr_t)&st, SCARG(uap, data), -					sizeof (st)); -			if (error) -				DPRINTF(("ibcs2_ioctl(%d): copyout failed ", -					 p->p_pid)); -			return error; -		} else -			return copyout((caddr_t)&sts, SCARG(uap, data), -					sizeof (sts)); -		/*NOTREACHED*/ -	    } - -	case IBCS2_TCSETA: -	case IBCS2_TCSETAW: -	case IBCS2_TCSETAF: -	    { -		struct termios bts; -		struct ibcs2_termios sts; -		struct ibcs2_termio st; - -		if ((error = copyin(SCARG(uap, data), (caddr_t)&st, -				    sizeof(st))) != 0) { -			DPRINTF(("ibcs2_ioctl(%d): TCSET copyin failed ", -				 p->p_pid)); -			return error; -		} - -		/* get full BSD termios so we don't lose information */ -		if ((error = (*ctl)(fp, TIOCGETA, (caddr_t)&bts, p)) != 0) { -			DPRINTF(("ibcs2_ioctl(%d): TCSET ctl failed fd %d ", -				 p->p_pid, SCARG(uap, fd))); -			return error; -		} - -		/* -		 * convert to iBCS2 termios, copy in information from -		 * termio, and convert back, then set new values. -		 */ -		btios2stios(&bts, &sts); -		stio2stios(&st, &sts); -		stios2btios(&sts, &bts); - -		return (*ctl)(fp, SCARG(uap, cmd) - IBCS2_TCSETA + TIOCSETA, -			      (caddr_t)&bts, p); -	    } - -	case IBCS2_XCSETA: -	case IBCS2_XCSETAW: -	case IBCS2_XCSETAF: -	    { -		struct termios bts; -		struct ibcs2_termios sts; - -		if ((error = copyin(SCARG(uap, data), (caddr_t)&sts, -				    sizeof (sts))) != 0) { -			return error; -		} -		stios2btios (&sts, &bts); -		return (*ctl)(fp, SCARG(uap, cmd) - IBCS2_XCSETA + TIOCSETA, -			      (caddr_t)&bts, p); -	    } - -	case IBCS2_OXCSETA: -	case IBCS2_OXCSETAW: -	case IBCS2_OXCSETAF: -	    { -		struct termios bts; -		struct ibcs2_termios sts; - -		if ((error = copyin(SCARG(uap, data), (caddr_t)&sts, -				    sizeof (sts))) != 0) { -			return error; -		} -		stios2btios (&sts, &bts); -		return (*ctl)(fp, SCARG(uap, cmd) - IBCS2_OXCSETA + TIOCSETA, -			      (caddr_t)&bts, p); -	    } - -	case IBCS2_TCSBRK: -		DPRINTF(("ibcs2_ioctl(%d): TCSBRK ", p->p_pid)); -		return ENOSYS; - -	case IBCS2_TCXONC: -		DPRINTF(("ibcs2_ioctl(%d): TCXONC ", p->p_pid)); -		return ENOSYS; - -	case IBCS2_TCFLSH: -		DPRINTF(("ibcs2_ioctl(%d): TCFLSH ", p->p_pid)); -		return ENOSYS; - -	case IBCS2_TIOCGWINSZ: -		SCARG(uap, cmd) = TIOCGWINSZ; -		return ioctl(p, uap, retval); - -	case IBCS2_TIOCSWINSZ: -		SCARG(uap, cmd) = TIOCSWINSZ; -		return ioctl(p, uap, retval); - -	case IBCS2_TIOCGPGRP: -		return copyout((caddr_t)&p->p_pgrp->pg_id, SCARG(uap, data), -				sizeof(p->p_pgrp->pg_id)); - -	case IBCS2_TIOCSPGRP:	/* XXX - is uap->data a pointer to pgid? */ -	    { -		struct setpgid_args sa; - -		SCARG(&sa, pid) = 0; -		SCARG(&sa, pgid) = (int)SCARG(uap, data); -		if (error = setpgid(p, &sa, retval)) -			return error; -		return 0; -	    } - -	case IBCS2_TCGETSC:	/* SCO console - get scancode flags */ -		return ENOSYS; - -	case IBCS2_TCSETSC:	/* SCO console - set scancode flags */ -		return ENOSYS; - -	case IBCS2_SIOCSOCKSYS: -		return ibcs2_socksys(p, uap, retval); - -	case IBCS2_I_NREAD:     /* STREAMS */ -	        SCARG(uap, cmd) = FIONREAD; -		return ioctl(p, uap, retval); - -	default: -		DPRINTF(("ibcs2_ioctl(%d): unknown cmd 0x%lx ", -			 p->p_pid, SCARG(uap, cmd))); -		return ENOSYS; -	} -	return ENOSYS; -} - diff --git a/sys/i386/ibcs2/ibcs2_ipc.c b/sys/i386/ibcs2/ibcs2_ipc.c deleted file mode 100644 index 6dc171417d8f5..0000000000000 --- a/sys/i386/ibcs2/ibcs2_ipc.c +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/ipc.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/mbuf.h> -#include <sys/mman.h> -#include <sys/mount.h> -#include <sys/reboot.h> -#include <sys/resource.h> -#include <sys/resourcevar.h> -#include <sys/signal.h> -#include <sys/signalvar.h> -#include <sys/socket.h> -#include <sys/time.h> -#include <sys/times.h> -#include <sys/vnode.h> -#include <sys/uio.h> -#include <sys/wait.h> -#include <sys/utsname.h> -#include <sys/unistd.h> -#include <sys/msg.h> -#include <sys/sem.h> -#include <sys/shm.h> -#include <sys/syscallargs.h> - -#include <vm/vm.h> - -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> -#include <compat/ibcs2/ibcs2_util.h> - -#define IBCS2_IPC_RMID	0 -#define IBCS2_IPC_SET	1 -#define IBCS2_IPC_STAT	2 - -/* - * iBCS2 msgsys call - */ - -struct ibcs2_msqid_ds { -	struct ipc_perm msg_perm; -	struct msg *msg_first; -	struct msg *msg_last; -	u_short msg_cbytes; -	u_short msg_qnum; -	u_short msg_qbytes; -	u_short msg_lspid; -	u_short msg_lrpid; -	ibcs2_time_t msg_stime; -	ibcs2_time_t msg_rtime; -	ibcs2_time_t msg_ctime; -}; - -static void -cvt_msqid2imsqid(bp, ibp) -struct msqid_ds *bp; -struct ibcs2_msqid_ds *ibp; -{ -	ibp->msg_perm = bp->msg_perm; -	ibp->msg_first = bp->msg_first; -	ibp->msg_last = bp->msg_last; -	ibp->msg_cbytes = (u_short)bp->msg_cbytes; -	ibp->msg_qnum = (u_short)bp->msg_qnum; -	ibp->msg_qbytes = (u_short)bp->msg_qbytes; -	ibp->msg_lspid = (u_short)bp->msg_lspid; -	ibp->msg_lrpid = (u_short)bp->msg_lrpid; -	ibp->msg_stime = bp->msg_stime; -	ibp->msg_rtime = bp->msg_rtime; -	ibp->msg_ctime = bp->msg_ctime; -	return; -} - -static void -cvt_imsqid2msqid(ibp, bp) -struct ibcs2_msqid_ds *ibp; -struct msqid_ds *bp; -{ -	bp->msg_perm = ibp->msg_perm; -	bp->msg_first = ibp->msg_first; -	bp->msg_last = ibp->msg_last; -	bp->msg_cbytes = ibp->msg_cbytes; -	bp->msg_qnum = ibp->msg_qnum; -	bp->msg_qbytes = ibp->msg_qbytes; -	bp->msg_lspid = ibp->msg_lspid; -	bp->msg_lrpid = ibp->msg_lrpid; -	bp->msg_stime = ibp->msg_stime; -	bp->msg_rtime = ibp->msg_rtime; -	bp->msg_ctime = ibp->msg_ctime; -	return; -} - -int -ibcs2_msgsys(p, uap, retval) -	struct proc *p; -	struct ibcs2_msgsys_args *uap; -	int *retval; -{ -	switch (SCARG(uap, which)) { -	case 0:				/* msgget */ -		SCARG(uap, which) = 1; -		return compat_10_msgsys(p, uap, retval); -	case 1: {			/* msgctl */ -		int error; -		struct compat_10_msgsys_args margs; -		caddr_t sg = stackgap_init(); - -		SCARG(&margs, which) = 0; -		SCARG(&margs, a2) = SCARG(uap, a2); -		SCARG(&margs, a4) = -		    (int)stackgap_alloc(&sg, sizeof(struct msqid_ds)); -		SCARG(&margs, a3) = SCARG(uap, a3); -		switch (SCARG(&margs, a3)) { -		case IBCS2_IPC_STAT: -			error = compat_10_msgsys(p, &margs, retval); -			if (!error) -				cvt_msqid2imsqid(SCARG(&margs, a4), -				    (struct ibcs2_msqid_ds *)SCARG(uap, a4)); -			return error; -		case IBCS2_IPC_SET: -			cvt_imsqid2msqid((struct ibcs2_msqid_ds *)SCARG(uap, -									a4), -					 SCARG(&margs, a4)); -			return compat_10_msgsys(p, &margs, retval); -		case IBCS2_IPC_RMID: -			return compat_10_msgsys(p, &margs, retval); -		} -		return EINVAL; -	} -	case 2:				/* msgrcv */ -		SCARG(uap, which) = 3; -		return compat_10_msgsys(p, uap, retval); -	case 3:				/* msgsnd */ -		SCARG(uap, which) = 2; -		return compat_10_msgsys(p, uap, retval); -	default: -		return EINVAL; -	} -} - - -/* - * iBCS2 semsys call - */ - -struct ibcs2_semid_ds { -        struct ipc_perm sem_perm; -	struct ibcs2_sem *sem_base; -	u_short sem_nsems; -	int pad1; -	ibcs2_time_t sem_otime; -	ibcs2_time_t sem_ctime; -}; - -struct ibcs2_sem { -        u_short semval; -	ibcs2_pid_t sempid; -	u_short semncnt; -	u_short semzcnt; -}; - -static void -cvt_sem2isem(bp, ibp) -struct sem *bp; -struct ibcs2_sem *ibp; -{ -	ibp->semval = bp->semval; -	ibp->sempid = bp->sempid; -	ibp->semncnt = bp->semncnt; -	ibp->semzcnt = bp->semzcnt; -	return; -} - -static void -cvt_isem2sem(ibp, bp) -struct ibcs2_sem *ibp; -struct sem *bp; -{ -	bp->semval = ibp->semval; -	bp->sempid = ibp->sempid; -	bp->semncnt = ibp->semncnt; -	bp->semzcnt = ibp->semzcnt; -	return; -} - -static void -cvt_semid2isemid(bp, ibp) -struct semid_ds *bp; -struct ibcs2_semid_ds *ibp; -{ -	ibp->sem_perm = bp->sem_perm; -	ibp->sem_base = (struct ibcs2_sem *)bp->sem_base; -	ibp->sem_nsems = bp->sem_nsems; -	ibp->sem_otime = bp->sem_otime; -	ibp->sem_ctime = bp->sem_ctime; -	return; -} - -static void -cvt_isemid2semid(ibp, bp) -struct ibcs2_semid_ds *ibp; -struct semid_ds *bp; -{ -	bp->sem_perm = ibp->sem_perm; -	bp->sem_base = (struct sem *)ibp->sem_base; -	bp->sem_nsems = ibp->sem_nsems; -	bp->sem_otime = ibp->sem_otime; -	bp->sem_ctime = ibp->sem_ctime; -	return; -} - -int -ibcs2_semsys(p, uap, retval) -	struct proc *p; -	struct ibcs2_semsys_args *uap; -	int *retval; -{ -	int error; - -	switch (SCARG(uap, which)) { -	case 0:					/* semctl */ -		switch(SCARG(uap, a4)) { -		case IBCS2_IPC_STAT: -		    { -			struct ibcs2_semid_ds *isp; -			struct semid_ds *sp; -			caddr_t sg = stackgap_init(); - -			isp = (struct ibcs2_semid_ds *)SCARG(uap, a5); -			sp = stackgap_alloc(&sg, sizeof(struct semid_ds)); -			SCARG(uap, a5) = (int)sp; -			error = compat_10_semsys(p, uap, retval); -			if (!error) { -				SCARG(uap, a5) = (int)isp; -				isp = stackgap_alloc(&sg, sizeof(*isp)); -				cvt_semid2isemid(sp, isp); -				error = copyout((caddr_t)isp, -						(caddr_t)SCARG(uap, a5), -						sizeof(*isp)); -			} -			return error; -		    } -		case IBCS2_IPC_SET: -		    { -			struct ibcs2_semid_ds *isp; -			struct semid_ds *sp; -			caddr_t sg = stackgap_init(); - -			isp = stackgap_alloc(&sg, sizeof(*isp)); -			sp = stackgap_alloc(&sg, sizeof(*sp)); -			error = copyin((caddr_t)SCARG(uap, a5), (caddr_t)isp, -				       sizeof(*isp)); -			if (error) -				return error; -			cvt_isemid2semid(isp, sp); -			SCARG(uap, a5) = (int)sp; -			return compat_10_semsys(p, uap, retval); -		    } -		} -		return compat_10_semsys(p, uap, retval); - -	case 1:				/* semget */ -		return compat_10_semsys(p, uap, retval); - -	case 2:				/* semop */ -		return compat_10_semsys(p, uap, retval); -	} -	return EINVAL; -} - - -/* - * iBCS2 shmsys call - */ - -struct ibcs2_shmid_ds { -        struct ipc_perm shm_perm; -	int shm_segsz; -	int pad1; -	char pad2[4]; -	u_short shm_lpid; -	u_short shm_cpid; -	u_short shm_nattch; -	u_short shm_cnattch; -	ibcs2_time_t shm_atime; -	ibcs2_time_t shm_dtime; -	ibcs2_time_t shm_ctime; -}; - -static void -cvt_shmid2ishmid(bp, ibp) -struct shmid_ds *bp; -struct ibcs2_shmid_ds *ibp; -{ -	ibp->shm_perm = bp->shm_perm; -	ibp->shm_segsz = bp->shm_segsz; -	ibp->shm_lpid = bp->shm_lpid; -	ibp->shm_cpid = bp->shm_cpid; -	ibp->shm_nattch = bp->shm_nattch; -	ibp->shm_cnattch = 0;			/* ignored anyway */ -	ibp->shm_atime = bp->shm_atime; -	ibp->shm_dtime = bp->shm_dtime; -	ibp->shm_ctime = bp->shm_ctime; -	return; -} - -static void -cvt_ishmid2shmid(ibp, bp) -struct ibcs2_shmid_ds *ibp; -struct shmid_ds *bp; -{ -	bp->shm_perm = ibp->shm_perm; -	bp->shm_segsz = ibp->shm_segsz; -	bp->shm_lpid = ibp->shm_lpid; -	bp->shm_cpid = ibp->shm_cpid; -	bp->shm_nattch = ibp->shm_nattch; -	bp->shm_atime = ibp->shm_atime; -	bp->shm_dtime = ibp->shm_dtime; -	bp->shm_ctime = ibp->shm_ctime; -	bp->shm_internal = (void *)0;		/* ignored anyway */ -	return; -} - -int -ibcs2_shmsys(p, uap, retval) -	struct proc *p; -	struct ibcs2_shmsys_args *uap; -	int *retval; -{ -	int error; - -	switch (SCARG(uap, which)) { -	case 0:						/* shmat */ -		return compat_10_shmsys(p, uap, retval); - -	case 1:						/* shmctl */ -		switch(SCARG(uap, a3)) { -		case IBCS2_IPC_STAT: -		    { -			struct ibcs2_shmid_ds *isp; -			struct shmid_ds *sp; -			caddr_t sg = stackgap_init(); - -			isp = (struct ibcs2_shmid_ds *)SCARG(uap, a4); -			sp = stackgap_alloc(&sg, sizeof(*sp)); -			SCARG(uap, a4) = (int)sp; -			error = compat_10_shmsys(p, uap, retval); -			if (!error) { -				SCARG(uap, a4) = (int)isp; -				isp = stackgap_alloc(&sg, sizeof(*isp)); -				cvt_shmid2ishmid(sp, isp); -				error = copyout((caddr_t)isp, -						(caddr_t)SCARG(uap, a4), -						sizeof(*isp)); -			} -			return error; -		    } -		case IBCS2_IPC_SET: -		    { -			struct ibcs2_shmid_ds *isp; -			struct shmid_ds *sp; -			caddr_t sg = stackgap_init(); - -			isp = stackgap_alloc(&sg, sizeof(*isp)); -			sp = stackgap_alloc(&sg, sizeof(*sp)); -			error = copyin((caddr_t)SCARG(uap, a4), (caddr_t)isp, -				       sizeof(*isp)); -			if (error) -				return error; -			cvt_ishmid2shmid(isp, sp); -			SCARG(uap, a4) = (int)sp; -			return compat_10_shmsys(p, uap, retval); -		    } -		} -		return compat_10_shmsys(p, uap, retval); - -	case 2:						/* shmdt */ -		return compat_10_shmsys(p, uap, retval); - -	case 3:						/* shmget */ -		return compat_10_shmsys(p, uap, retval); -	} -	return EINVAL; -} diff --git a/sys/i386/ibcs2/ibcs2_misc.c b/sys/i386/ibcs2/ibcs2_misc.c deleted file mode 100644 index cc1da262bbc0f..0000000000000 --- a/sys/i386/ibcs2/ibcs2_misc.c +++ /dev/null @@ -1,1200 +0,0 @@ -/*	$NetBSD: ibcs2_misc.c,v 1.6 1995/05/01 19:33:17 mycroft Exp $	*/ - -/* - * Copyright (c) 1994, 1995 Scott Bartram - * Copyright (c) 1992, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * This software was developed by the Computer Systems Engineering group - * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and - * contributed to Berkeley. - * - * All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - *	This product includes software developed by the University of - *	California, Lawrence Berkeley Laboratory. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed by the University of - *	California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - *    may be used to endorse or promote products derived from this software - *    without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: Header: sun_misc.c,v 1.16 93/04/07 02:46:27 torek Exp  - * - *	@(#)sun_misc.c	8.1 (Berkeley) 6/18/93 - */ - -/* - * IBCS2 compatibility module. - * - * IBCS2 system calls that are implemented differently in BSD are - * handled here. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/mbuf.h> -#include <sys/mman.h> -#include <sys/mount.h> -#include <sys/reboot.h> -#include <sys/resource.h> -#include <sys/resourcevar.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/times.h> -#include <sys/vnode.h> -#include <sys/uio.h> -#include <sys/wait.h> -#include <sys/utsname.h> -#include <sys/unistd.h> - -#include <ufs/ufs/dir.h> - -#include <netinet/in.h> -#include <sys/syscallargs.h> - -#include <miscfs/specfs/specdev.h> - -#include <vm/vm.h> -#include <sys/sysctl.h>		/* must be included after vm.h */ - -#include <i386/include/reg.h> - -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_dirent.h> -#include <compat/ibcs2/ibcs2_fcntl.h> -#include <compat/ibcs2/ibcs2_time.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_timeb.h> -#include <compat/ibcs2/ibcs2_unistd.h> -#include <compat/ibcs2/ibcs2_utsname.h> -#include <compat/ibcs2/ibcs2_util.h> -#include <compat/ibcs2/ibcs2_utime.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> - - -int -ibcs2_ulimit(p, uap, retval) -	struct proc *p; -	struct ibcs2_ulimit_args *uap; -	int *retval; -{ -	int error; -	struct rlimit rl; -	struct setrlimit_args { -		int resource; -		struct rlimit *rlp; -	} sra; -#define IBCS2_GETFSIZE		1 -#define IBCS2_SETFSIZE		2 -#define IBCS2_GETPSIZE		3 -#define IBCS2_GETDTABLESIZE	4 -	 -	switch (SCARG(uap, cmd)) { -	case IBCS2_GETFSIZE: -		*retval = p->p_rlimit[RLIMIT_FSIZE].rlim_cur; -		return 0; -	case IBCS2_SETFSIZE:	/* XXX - fix this */ -#ifdef notyet -		rl.rlim_cur = SCARG(uap, newlimit); -		sra.resource = RLIMIT_FSIZE; -		sra.rlp = &rl; -		error = setrlimit(p, &sra, retval); -		if (!error) -			*retval = p->p_rlimit[RLIMIT_FSIZE].rlim_cur; -		else -			DPRINTF(("failed ")); -		return error; -#else -		*retval = SCARG(uap, newlimit); -		return 0; -#endif -	case IBCS2_GETPSIZE: -		*retval = p->p_rlimit[RLIMIT_RSS].rlim_cur; /* XXX */ -		return 0; -	case IBCS2_GETDTABLESIZE: -		uap->cmd = IBCS2_SC_OPEN_MAX; -		return ibcs2_sysconf(p, uap, retval); -	default: -		return ENOSYS; -	} -} - -int -ibcs2_waitsys(p, uap, retval) -	struct proc *p; -	struct ibcs2_waitsys_args *uap; -	int *retval; -{ -	int error, status; -	struct wait4_args w4; -#define WAITPID_EFLAGS	0x8c4	/* OF, SF, ZF, PF */ -	 -	SCARG(&w4, rusage) = NULL; -	if ((p->p_md.md_regs->tf_eflags & WAITPID_EFLAGS) == WAITPID_EFLAGS) { -		/* waitpid */ -		SCARG(&w4, pid) = SCARG(uap, a1); -		SCARG(&w4, status) = (int *)SCARG(uap, a2); -		SCARG(&w4, options) = SCARG(uap, a3); -	} else { -		/* wait */ -		SCARG(&w4, pid) = WAIT_ANY; -		SCARG(&w4, status) = (int *)SCARG(uap, a1); -		SCARG(&w4, options) = 0; -	} -	if ((error = wait4(p, &w4, retval)) != 0) -		return error; -	if (SCARG(&w4, status))		/* this is real iBCS brain-damage */ -		return copyin((caddr_t)SCARG(&w4, status), (caddr_t)&retval[1], -			      sizeof(SCARG(&w4, status))); -	return 0; -} - -int -ibcs2_execv(p, uap, retval) -	struct proc *p; -	struct ibcs2_execv_args *uap; -	int *retval; -{ -	struct execve_args ea; -	caddr_t sg = stackgap_init(); - -        CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	SCARG(&ea, path) = SCARG(uap, path); -	SCARG(&ea, argp) = SCARG(uap, argp); -	SCARG(&ea, envp) = NULL; -	return execve(p, &ea, retval); -} - -int -ibcs2_execve(p, uap, retval)  -        struct proc *p; -        struct execve_args *uap; -        int *retval; -{ -        caddr_t sg = stackgap_init(); - -        CHECKALTEXIST(p, &sg, SCARG(uap, path)); -        return execve(p, uap, retval); -} - -int -ibcs2_umount(p, uap, retval) -	struct proc *p; -	struct ibcs2_umount_args *uap; -	int *retval; -{ -	struct unmount_args um; - -	SCARG(&um, path) = SCARG(uap, name); -	SCARG(&um, flags) = 0; -	return unmount(p, &um, retval); -} - -int -ibcs2_mount(p, uap, retval) -	struct proc *p; -	struct ibcs2_mount_args *uap; -	int *retval; -{ -#ifdef notyet -	int oflags = SCARG(uap, flags), nflags, error; -	char fsname[MFSNAMELEN]; - -	if (oflags & (IBCS2_MS_NOSUB | IBCS2_MS_SYS5)) -		return (EINVAL); -	if ((oflags & IBCS2_MS_NEWTYPE) == 0) -		return (EINVAL); -	nflags = 0; -	if (oflags & IBCS2_MS_RDONLY) -		nflags |= MNT_RDONLY; -	if (oflags & IBCS2_MS_NOSUID) -		nflags |= MNT_NOSUID; -	if (oflags & IBCS2_MS_REMOUNT) -		nflags |= MNT_UPDATE; -	SCARG(uap, flags) = nflags; - -	if (error = copyinstr((caddr_t)SCARG(uap, type), fsname, sizeof fsname, -			      (u_int *)0)) -		return (error); - -	if (strcmp(fsname, "4.2") == 0) { -		SCARG(uap, type) = (caddr_t)STACK_ALLOC(); -		if (error = copyout("ufs", SCARG(uap, type), sizeof("ufs"))) -			return (error); -	} else if (strcmp(fsname, "nfs") == 0) { -		struct ibcs2_nfs_args sna; -		struct sockaddr_in sain; -		struct nfs_args na; -		struct sockaddr sa; - -		if (error = copyin(SCARG(uap, data), &sna, sizeof sna)) -			return (error); -		if (error = copyin(sna.addr, &sain, sizeof sain)) -			return (error); -		bcopy(&sain, &sa, sizeof sa); -		sa.sa_len = sizeof(sain); -		SCARG(uap, data) = (caddr_t)STACK_ALLOC(); -		na.addr = (struct sockaddr *)((int)SCARG(uap, data) + sizeof na); -		na.sotype = SOCK_DGRAM; -		na.proto = IPPROTO_UDP; -		na.fh = (nfsv2fh_t *)sna.fh; -		na.flags = sna.flags; -		na.wsize = sna.wsize; -		na.rsize = sna.rsize; -		na.timeo = sna.timeo; -		na.retrans = sna.retrans; -		na.hostname = sna.hostname; - -		if (error = copyout(&sa, na.addr, sizeof sa)) -			return (error); -		if (error = copyout(&na, SCARG(uap, data), sizeof na)) -			return (error); -	} -	return (mount(p, uap, retval)); -#else -	return EINVAL; -#endif -} - -/* - * Read iBCS2-style directory entries.  We suck them into kernel space so - * that they can be massaged before being copied out to user code.  Like - * SunOS, we squish out `empty' entries. - * - * This is quite ugly, but what do you expect from compatibility code? - */ - -int -ibcs2_getdents(p, uap, retval) -	struct proc *p; -	register struct ibcs2_getdents_args *uap; -	int *retval; -{ -	register struct vnode *vp; -	register caddr_t inp, buf;	/* BSD-format */ -	register int len, reclen;	/* BSD-format */ -	register caddr_t outp;		/* iBCS2-format */ -	register int resid;		/* iBCS2-format */ -	struct file *fp; -	struct uio auio; -	struct iovec aiov; -	struct ibcs2_dirent idb; -	off_t off;			/* true file offset */ -	int buflen, error, eofflag; -#define	BSD_DIRENT(cp)		((struct direct *)(cp)) -#define	IBCS2_RECLEN(reclen)	(reclen + sizeof(u_short)) - -	if ((error = getvnode(p->p_fd, SCARG(uap, fd), &fp)) != 0) -		return (error); -	if ((fp->f_flag & FREAD) == 0) -		return (EBADF); -	vp = (struct vnode *)fp->f_data; -	if (vp->v_type != VDIR)	/* XXX  vnode readdir op should do this */ -		return (EINVAL); -	buflen = min(MAXBSIZE, SCARG(uap, nbytes)); -	buf = malloc(buflen, M_TEMP, M_WAITOK); -	VOP_LOCK(vp); -	off = fp->f_offset; -again: -	aiov.iov_base = buf; -	aiov.iov_len = buflen; -	auio.uio_iov = &aiov; -	auio.uio_iovcnt = 1; -	auio.uio_rw = UIO_READ; -	auio.uio_segflg = UIO_SYSSPACE; -	auio.uio_procp = p; -	auio.uio_resid = buflen; -	auio.uio_offset = off; -	/* -	 * First we read into the malloc'ed buffer, then -	 * we massage it into user space, one record at a time. -	 */ -	if (error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, (u_long *)0, -	    0)) -		goto out; -	inp = buf; -	outp = SCARG(uap, buf); -	resid = SCARG(uap, nbytes); -	if ((len = buflen - auio.uio_resid) == 0) -		goto eof; -	for (; len > 0; len -= reclen) { -		reclen = BSD_DIRENT(inp)->d_reclen; -		if (reclen & 3) -			panic("ibcs2_getdents"); -		off += reclen;		/* each entry points to next */ -		if (BSD_DIRENT(inp)->d_ino == 0) { -			inp += reclen;	/* it is a hole; squish it out */ -			continue; -		} -		if (reclen > len || resid < IBCS2_RECLEN(reclen)) { -			/* entry too big for buffer, so just stop */ -			outp++; -			break; -		} -		/* -		 * Massage in place to make a iBCS2-shaped dirent (otherwise -		 * we have to worry about touching user memory outside of -		 * the copyout() call). -		 */ -		idb.d_ino = (ibcs2_ino_t)BSD_DIRENT(inp)->d_ino; -		idb.d_off = (ibcs2_off_t)off; -		idb.d_reclen = (u_short)IBCS2_RECLEN(reclen); -		if ((error = copyout((caddr_t)&idb, outp, 10)) != 0 || -		    (error = copyout(BSD_DIRENT(inp)->d_name, outp + 10, -				     BSD_DIRENT(inp)->d_namlen + 1)) != 0) -			goto out; -		/* advance past this real entry */ -		inp += reclen; -		/* advance output past iBCS2-shaped entry */ -		outp += IBCS2_RECLEN(reclen); -		resid -= IBCS2_RECLEN(reclen); -	} -	/* if we squished out the whole block, try again */ -	if (outp == SCARG(uap, buf)) -		goto again; -	fp->f_offset = off;		/* update the vnode offset */ -eof: -	*retval = SCARG(uap, nbytes) - resid; -out: -	VOP_UNLOCK(vp); -	free(buf, M_TEMP); -	return (error); -} - -int -ibcs2_read(p, uap, retval) -	struct proc *p; -	struct ibcs2_read_args *uap; -	int *retval; -{ -	register struct vnode *vp; -	register caddr_t inp, buf;	/* BSD-format */ -	register int len, reclen;	/* BSD-format */ -	register caddr_t outp;		/* iBCS2-format */ -	register int resid;		/* iBCS2-format */ -	struct file *fp; -	struct uio auio; -	struct iovec aiov; -	struct ibcs2_direct { -		ibcs2_ino_t ino; -		char name[14]; -	} idb; -	off_t off;			/* true file offset */ -	int buflen, error, eofflag, size; - -	if (error = getvnode(p->p_fd, SCARG(uap, fd), &fp)) { -		if (error == EINVAL) -			return read(p, uap, retval); -		else -			return error; -	} -	if ((fp->f_flag & FREAD) == 0) -		return (EBADF); -	vp = (struct vnode *)fp->f_data; -	if (vp->v_type != VDIR) -		return read(p, uap, retval); -	DPRINTF(("ibcs2_read: read directory\n")); -	buflen = max(MAXBSIZE, SCARG(uap, nbytes)); -	buf = malloc(buflen, M_TEMP, M_WAITOK); -	VOP_LOCK(vp); -	off = fp->f_offset; -again: -	aiov.iov_base = buf; -	aiov.iov_len = buflen; -	auio.uio_iov = &aiov; -	auio.uio_iovcnt = 1; -	auio.uio_rw = UIO_READ; -	auio.uio_segflg = UIO_SYSSPACE; -	auio.uio_procp = p; -	auio.uio_resid = buflen; -	auio.uio_offset = off & ~(DIRBLKSIZ - 1); -	/* -	 * First we read into the malloc'ed buffer, then -	 * we massage it into user space, one record at a time. -	 */ -	if (error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, -				(u_long *)0, 0)) { -		DPRINTF(("VOP_READDIR failed: %d\n", error)); -		goto out; -	} -	inp = buf + (off & (DIRBLKSIZ - 1)); -	buflen -= off & (DIRBLKSIZ - 1); -	outp = SCARG(uap, buf); -	resid = SCARG(uap, nbytes); -	if ((len = buflen - auio.uio_resid) == 0) -		goto eof; -	for (; len > 0 && resid > 0; len -= reclen) { -		reclen = BSD_DIRENT(inp)->d_reclen; -		if (reclen & 3) -			panic("ibcs2_read"); -		if (BSD_DIRENT(inp)->d_ino == 0) { -			inp += reclen;	/* it is a hole; squish it out */ -			off += reclen; -			continue; -		} -		if (reclen > len || resid < sizeof(struct ibcs2_direct)) { -			/* entry too big for buffer, so just stop */ -			outp++; -			break; -		} -		/* -		 * Massage in place to make a iBCS2-shaped dirent (otherwise -		 * we have to worry about touching user memory outside of -		 * the copyout() call). -		 * -		 * TODO: if length(filename) > 14, then break filename into -		 * multiple entries and set inode = 0xffff except last -		 */ -		idb.ino = (BSD_DIRENT(inp)->d_ino > 0xfffe) ? 0xfffe : -			BSD_DIRENT(inp)->d_ino; -		(void)copystr(BSD_DIRENT(inp)->d_name, idb.name, 14, &size); -		bzero(idb.name + size, 14 - size); -		if (error = copyout(&idb, outp, sizeof(struct ibcs2_direct))) -			goto out; -		/* advance past this real entry */ -		off += reclen; -		inp += reclen; -		/* advance output past iBCS2-shaped entry */ -		outp += sizeof(struct ibcs2_direct); -		resid -= sizeof(struct ibcs2_direct); -	} -	/* if we squished out the whole block, try again */ -	if (outp == SCARG(uap, buf)) -		goto again; -	fp->f_offset = off;		/* update the vnode offset */ -eof: -	*retval = SCARG(uap, nbytes) - resid; -out: -	VOP_UNLOCK(vp); -	free(buf, M_TEMP); -	return (error); -} - -int -ibcs2_mknod(p, uap, retval) -	struct proc *p; -	struct ibcs2_mknod_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -        CHECKALTCREAT(p, &sg, SCARG(uap, path)); -	if (S_ISFIFO(SCARG(uap, mode))) { -                struct mkfifo_args ap; -                SCARG(&ap, path) = SCARG(uap, path); -                SCARG(&ap, mode) = SCARG(uap, mode); -		return mkfifo(p, uap, retval); -	} else { -                struct mknod_args ap; -                SCARG(&ap, path) = SCARG(uap, path); -                SCARG(&ap, mode) = SCARG(uap, mode); -                SCARG(&ap, dev) = SCARG(uap, dev); -                return mknod(p, &ap, retval); -	} -} - -int -ibcs2_getgroups(p, uap, retval) -	struct proc *p; -	struct ibcs2_getgroups_args *uap; -	int *retval; -{ -	int error, i; -	ibcs2_gid_t igid, *iset; -	struct getgroups_args sa; -	gid_t *gp; -	caddr_t sg = stackgap_init(); - -	SCARG(&sa, gidsetsize) = SCARG(uap, gidsetsize); -	if (SCARG(uap, gidsetsize)) { -		SCARG(&sa, gidset) = stackgap_alloc(&sg, NGROUPS_MAX * -						    sizeof(gid_t *)); -		iset = stackgap_alloc(&sg, SCARG(uap, gidsetsize) * -				      sizeof(ibcs2_gid_t)); -	} -	if (error = getgroups(p, &sa, retval)) -		return error; -	for (i = 0, gp = SCARG(&sa, gidset); i < retval[0]; i++) -		iset[i] = (ibcs2_gid_t)*gp++; -	if (retval[0] && (error = copyout((caddr_t)iset, -					  (caddr_t)SCARG(uap, gidset), -					  sizeof(ibcs2_gid_t) * retval[0]))) -		return error; -        return 0; -} - -int -ibcs2_setgroups(p, uap, retval) -	struct proc *p; -	struct ibcs2_setgroups_args *uap; -	int *retval; -{ -	int error, i; -	ibcs2_gid_t igid, *iset; -	struct setgroups_args sa; -	gid_t *gp; -	caddr_t sg = stackgap_init(); - -	SCARG(&sa, gidsetsize) = SCARG(uap, gidsetsize); -	SCARG(&sa, gidset) = stackgap_alloc(&sg, SCARG(&sa, gidsetsize) * -					    sizeof(gid_t *)); -	iset = stackgap_alloc(&sg, SCARG(&sa, gidsetsize) * -			      sizeof(ibcs2_gid_t *)); -	if (SCARG(&sa, gidsetsize)) { -		if (error = copyin((caddr_t)SCARG(uap, gidset), (caddr_t)iset,  -				   sizeof(ibcs2_gid_t *) * -				   SCARG(uap, gidsetsize))) -			return error; -	} -	for (i = 0, gp = SCARG(&sa, gidset); i < SCARG(&sa, gidsetsize); i++) -		*gp++ = (gid_t)iset[i]; -	return setgroups(p, &sa, retval); -} - -int -ibcs2_setuid(p, uap, retval) -	struct proc *p; -	struct ibcs2_setuid_args *uap; -	int *retval; -{ -	struct setuid_args sa; - -	SCARG(&sa, uid) = (uid_t)SCARG(uap, uid); -	return setuid(p, &sa, retval); -} - -int -ibcs2_setgid(p, uap, retval) -	struct proc *p; -	struct ibcs2_setgid_args *uap; -	int *retval; -{ -	struct setgid_args sa; - -	SCARG(&sa, gid) = (gid_t)SCARG(uap, gid); -	return setgid(p, &sa, retval); -} - -int -xenix_ftime(p, uap, retval) -	struct proc *p; -	struct xenix_ftime_args *uap; -	int *retval; -{ -	struct timeval tv; -	extern struct timezone tz; -	struct xenix_timeb itb; - -	microtime(&tv); -	itb.time = tv.tv_sec; -	itb.millitm = (tv.tv_usec / 1000); -	itb.timezone = tz.tz_minuteswest; -	itb.dstflag = tz.tz_dsttime; -	return copyout((caddr_t)&itb, (caddr_t)SCARG(uap, tp), xenix_timeb_len); -} - -int -ibcs2_time(p, uap, retval) -	struct proc *p; -	struct ibcs2_time_args *uap; -	int *retval; -{ -	struct timeval tv; - -	microtime(&tv); -	*retval = tv.tv_sec; -	if (SCARG(uap, tp)) -		return copyout((caddr_t)&tv.tv_sec, (caddr_t)SCARG(uap, tp), -			       sizeof(ibcs2_time_t)); -	else -		return 0; -} - -int -ibcs2_pathconf(p, uap, retval) -	struct proc *p; -	struct ibcs2_pathconf_args *uap; -	int *retval; -{ -	SCARG(uap, name)++;	/* iBCS2 _PC_* defines are offset by one */ -        return pathconf(p, uap, retval); -} - -int -ibcs2_fpathconf(p, uap, retval) -	struct proc *p; -	struct ibcs2_fpathconf_args *uap; -	int *retval; -{ -	SCARG(uap, name)++;	/* iBCS2 _PC_* defines are offset by one */ -        return fpathconf(p, uap, retval); -} - -int -ibcs2_sysconf(p, uap, retval) -	struct proc *p; -	struct ibcs2_sysconf_args *uap; -	int *retval; -{ -	int mib[2], value, len, error; -	struct __sysctl_args sa; -	struct getrlimit_args ga; - -	switch(SCARG(uap, name)) { -	case IBCS2_SC_ARG_MAX: -		mib[1] = KERN_ARGMAX; -		break; - -	case IBCS2_SC_CHILD_MAX: -	    { -		caddr_t sg = stackgap_init(); - -		SCARG(&ga, which) = RLIMIT_NPROC; -		SCARG(&ga, rlp) = stackgap_alloc(&sg, sizeof(struct rlimit *)); -		if (error = getrlimit(p, &ga, retval)) -			return error; -		*retval = SCARG(&ga, rlp)->rlim_cur; -		return 0; -	    } - -	case IBCS2_SC_CLK_TCK: -		*retval = hz; -		return 0; - -	case IBCS2_SC_NGROUPS_MAX: -		mib[1] = KERN_NGROUPS; -		break; - -	case IBCS2_SC_OPEN_MAX: -	    { -		caddr_t sg = stackgap_init(); - -		SCARG(&ga, which) = RLIMIT_NOFILE; -		SCARG(&ga, rlp) = stackgap_alloc(&sg, sizeof(struct rlimit *)); -		if (error = getrlimit(p, &ga, retval)) -			return error; -		*retval = SCARG(&ga, rlp)->rlim_cur; -		return 0; -	    } -		 -	case IBCS2_SC_JOB_CONTROL: -		mib[1] = KERN_JOB_CONTROL; -		break; -		 -	case IBCS2_SC_SAVED_IDS: -		mib[1] = KERN_SAVED_IDS; -		break; -		 -	case IBCS2_SC_VERSION: -		mib[1] = KERN_POSIX1; -		break; -		 -	case IBCS2_SC_PASS_MAX: -		*retval = 128;		/* XXX - should we create PASS_MAX ? */ -		return 0; - -	case IBCS2_SC_XOPEN_VERSION: -		*retval = 2;		/* XXX: What should that be? */ -		return 0; -		 -	default: -		return EINVAL; -	} - -	mib[0] = CTL_KERN; -	len = sizeof(value); -	SCARG(&sa, name) = mib; -	SCARG(&sa, namelen) = 2; -	SCARG(&sa, old) = &value; -	SCARG(&sa, oldlenp) = &len; -	SCARG(&sa, new) = NULL; -	SCARG(&sa, newlen) = 0; -	if (error = __sysctl(p, &sa, retval)) -		return error; -	*retval = value; -	return 0; -} - -int -ibcs2_alarm(p, uap, retval) -	struct proc *p; -	struct ibcs2_alarm_args *uap; -	int *retval; -{ -	int error; -        struct itimerval *itp, *oitp; -	struct setitimer_args sa; -	caddr_t sg = stackgap_init(); - -        itp = stackgap_alloc(&sg, sizeof(*itp)); -	oitp = stackgap_alloc(&sg, sizeof(*oitp)); -        timerclear(&itp->it_interval); -        itp->it_value.tv_sec = SCARG(uap, sec); -        itp->it_value.tv_usec = 0; - -	SCARG(&sa, which) = ITIMER_REAL; -	SCARG(&sa, itv) = itp; -	SCARG(&sa, oitv) = oitp; -        error = setitimer(p, &sa, retval); -	if (error) -		return error; -        if (oitp->it_value.tv_usec) -                oitp->it_value.tv_sec++; -        *retval = oitp->it_value.tv_sec; -        return 0; -} - -int -ibcs2_getmsg(p, uap, retval) -	struct proc *p; -	struct ibcs2_getmsg_args *uap; -	int *retval; -{ -	return 0; -} - -int -ibcs2_putmsg(p, uap, retval) -	struct proc *p; -	struct ibcs2_putmsg_args *uap; -	int *retval; -{ -	return 0; -} - -int -ibcs2_times(p, uap, retval) -	struct proc *p; -	struct ibcs2_times_args *uap; -	int *retval; -{ -	int error; -	struct getrusage_args ga; -	struct tms tms; -        struct timeval t; -	caddr_t sg = stackgap_init(); -        struct rusage *ru = stackgap_alloc(&sg, sizeof(*ru)); -#define CONVTCK(r)      (r.tv_sec * hz + r.tv_usec / (1000000 / hz)) - -	SCARG(&ga, who) = RUSAGE_SELF; -	SCARG(&ga, rusage) = ru; -	error = getrusage(p, &ga, retval); -	if (error) -                return error; -        tms.tms_utime = CONVTCK(ru->ru_utime); -        tms.tms_stime = CONVTCK(ru->ru_stime); - -	SCARG(&ga, who) = RUSAGE_CHILDREN; -        error = getrusage(p, &ga, retval); -	if (error) -		return error; -        tms.tms_cutime = CONVTCK(ru->ru_utime); -        tms.tms_cstime = CONVTCK(ru->ru_stime); - -	microtime(&t); -        *retval = CONVTCK(t); -	 -	return copyout((caddr_t)&tms, (caddr_t)SCARG(uap, tp), -		       sizeof(struct tms)); -} - -int -ibcs2_stime(p, uap, retval) -	struct proc *p; -	struct ibcs2_stime_args *uap; -	int *retval; -{ -	int error; -	struct settimeofday_args sa; -	caddr_t sg = stackgap_init(); - -	SCARG(&sa, tv) = stackgap_alloc(&sg, sizeof(*SCARG(&sa, tv))); -	SCARG(&sa, tzp) = NULL; -	if (error = copyin((caddr_t)SCARG(uap, timep), -			   &(SCARG(&sa, tv)->tv_sec), sizeof(long))) -		return error; -	SCARG(&sa, tv)->tv_usec = 0; -	if (error = settimeofday(p, &sa, retval)) -		return EPERM; -	return 0; -} - -int -ibcs2_utime(p, uap, retval) -	struct proc *p; -	struct ibcs2_utime_args *uap; -	int *retval; -{ -	int error; -	struct utimes_args sa; -	struct timeval *tp; -	caddr_t sg = stackgap_init(); - -        CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	SCARG(&sa, path) = SCARG(uap, path); -	if (SCARG(uap, buf)) { -		struct ibcs2_utimbuf ubuf; - -		if (error = copyin((caddr_t)SCARG(uap, buf), (caddr_t)&ubuf, -				   sizeof(ubuf))) -			return error; -		SCARG(&sa, tptr) = stackgap_alloc(&sg, -						  2 * sizeof(struct timeval *)); -		tp = (struct timeval *)SCARG(&sa, tptr); -		tp->tv_sec = ubuf.actime; -		tp->tv_usec = 0; -		tp++; -		tp->tv_sec = ubuf.modtime; -		tp->tv_usec = 0; -	} else -		SCARG(&sa, tptr) = NULL; -	return utimes(p, &sa, retval); -} - -int -ibcs2_nice(p, uap, retval) -	struct proc *p; -	struct ibcs2_nice_args *uap; -	int *retval; -{ -	int error, cur_nice = p->p_nice; -	struct setpriority_args sa; - -	SCARG(&sa, which) = PRIO_PROCESS; -	SCARG(&sa, who) = 0; -	SCARG(&sa, prio) = p->p_nice + SCARG(uap, incr); -	if (error = setpriority(p, &sa, retval)) -		return EPERM; -	*retval = p->p_nice; -	return 0; -} - -/* - * iBCS2 getpgrp, setpgrp, setsid, and setpgid - */ - -int -ibcs2_pgrpsys(p, uap, retval) -	struct proc *p; -	struct ibcs2_pgrpsys_args *uap; -	int *retval; -{ -	switch (SCARG(uap, type)) { -	case 0:			/* getpgrp */ -		*retval = p->p_pgrp->pg_id; -		return 0; - -	case 1:			/* setpgrp */ -	    { -		struct setpgid_args sa; - -		SCARG(&sa, pid) = 0; -		SCARG(&sa, pgid) = 0; -		setpgid(p, &sa, retval); -		*retval = p->p_pgrp->pg_id; -		return 0; -	    } - -	case 2:			/* setpgid */ -	    { -		struct setpgid_args sa; - -		SCARG(&sa, pid) = SCARG(uap, pid); -		SCARG(&sa, pgid) = SCARG(uap, pgid); -		return setpgid(p, &sa, retval); -	    } - -	case 3:			/* setsid */ -		return setsid(p, NULL, retval); - -	default: -		return EINVAL; -	} -} - -/* - * XXX - need to check for nested calls - */ - -int -ibcs2_plock(p, uap, retval) -	struct proc *p; -	struct ibcs2_plock_args *uap; -	int *retval; -{ -	int error; -#define IBCS2_UNLOCK	0 -#define IBCS2_PROCLOCK	1 -#define IBCS2_TEXTLOCK	2 -#define IBCS2_DATALOCK	4 - -	 -        if (error = suser(p->p_ucred, &p->p_acflag)) -                return EPERM; -	switch(SCARG(uap, cmd)) { -	case IBCS2_UNLOCK: -	case IBCS2_PROCLOCK: -	case IBCS2_TEXTLOCK: -	case IBCS2_DATALOCK: -		return 0;	/* XXX - TODO */ -	} -	return EINVAL; -} - -int -ibcs2_uadmin(p, uap, retval) -	struct proc *p; -	struct ibcs2_uadmin_args *uap; -	int *retval; -{ -#define SCO_A_REBOOT        1 -#define SCO_A_SHUTDOWN      2 -#define SCO_A_REMOUNT       4 -#define SCO_A_CLOCK         8 -#define SCO_A_SETCONFIG     128 -#define SCO_A_GETDEV        130 - -#define SCO_AD_HALT         0 -#define SCO_AD_BOOT         1 -#define SCO_AD_IBOOT        2 -#define SCO_AD_PWRDOWN      3 -#define SCO_AD_PWRNAP       4 - -#define SCO_AD_PANICBOOT    1 - -#define SCO_AD_GETBMAJ      0 -#define SCO_AD_GETCMAJ      1 - -	switch(SCARG(uap, cmd)) { -	case SCO_A_REBOOT: -	case SCO_A_SHUTDOWN: -		switch(SCARG(uap, func)) { -		case SCO_AD_HALT: -		case SCO_AD_PWRDOWN: -		case SCO_AD_PWRNAP: -			reboot(RB_HALT); -		case SCO_AD_BOOT: -		case SCO_AD_IBOOT: -			reboot(RB_AUTOBOOT); -		} -		return EINVAL; -	case SCO_A_REMOUNT: -	case SCO_A_CLOCK: -	case SCO_A_SETCONFIG: -		return 0; -	case SCO_A_GETDEV: -		return EINVAL;	/* XXX - TODO */ -	} -	return EINVAL; -} - -int -ibcs2_sysfs(p, uap, retval) -	struct proc *p; -	struct ibcs2_sysfs_args *uap; -	int *retval; -{ -#define IBCS2_GETFSIND        1 -#define IBCS2_GETFSTYP        2 -#define IBCS2_GETNFSTYP       3 - -	switch(SCARG(uap, cmd)) { -	case IBCS2_GETFSIND: -	case IBCS2_GETFSTYP: -	case IBCS2_GETNFSTYP: -	} -	return EINVAL;		/* XXX - TODO */ -} - -int -ibcs2_poll(p, uap, retval) -	struct proc *p; -	struct ibcs2_poll_args *uap; -	int *retval; -{ -	return EINVAL;		/* XXX - TODO */ -} - -int -xenix_rdchk(p, uap, retval) -	struct proc *p; -	struct xenix_rdchk_args *uap; -	int *retval; -{ -	int error; -	struct ioctl_args sa; -	caddr_t sg = stackgap_init(); - -	SCARG(&sa, fd) = SCARG(uap, fd); -	SCARG(&sa, com) = FIONREAD; -	SCARG(&sa, data) = stackgap_alloc(&sg, sizeof(int)); -	if (error = ioctl(p, &sa, retval)) -		return error; -	*retval = (*((int*)SCARG(&sa, data))) ? 1 : 0; -	return 0; -} - -int -xenix_chsize(p, uap, retval) -	struct proc *p; -	struct xenix_chsize_args *uap; -	int *retval; -{ -	struct ftruncate_args sa; - -	SCARG(&sa, fd) = SCARG(uap, fd); -	SCARG(&sa, pad) = 0; -	SCARG(&sa, length) = SCARG(uap, size); -	return ftruncate(p, &sa, retval); -} - -int -xenix_nap(p, uap, retval) -	struct proc *p; -	struct xenix_nap_args *uap; -	int *retval; -{ -	return ENOSYS; -} - -int -ibcs2_unlink(p, uap, retval) -	struct proc *p; -	struct ibcs2_unlink_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	return unlink(p, uap, retval); -} - -int -ibcs2_chdir(p, uap, retval) -	struct proc *p; -	struct ibcs2_chdir_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	return chdir(p, uap, retval); -} - -int -ibcs2_chmod(p, uap, retval) -	struct proc *p; -	struct ibcs2_chmod_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	return chmod(p, uap, retval); -} - -int -ibcs2_chown(p, uap, retval) -	struct proc *p; -	struct ibcs2_chown_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	return chown(p, uap, retval); -} - -int -ibcs2_rmdir(p, uap, retval) -	struct proc *p; -	struct ibcs2_rmdir_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	return rmdir(p, uap, retval); -} - -int -ibcs2_mkdir(p, uap, retval) -	struct proc *p; -	struct ibcs2_mkdir_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTCREAT(p, &sg, SCARG(uap, path)); -	return mkdir(p, uap, retval); -} - -int -ibcs2_symlink(p, uap, retval) -	struct proc *p; -	struct ibcs2_symlink_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	CHECKALTCREAT(p, &sg, SCARG(uap, link)); -	return symlink(p, uap, retval); -} - -int -ibcs2_rename(p, uap, retval) -	struct proc *p; -	struct ibcs2_rename_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, from)); -	CHECKALTCREAT(p, &sg, SCARG(uap, to)); -	return rename(p, uap, retval); -} - -int -ibcs2_readlink(p, uap, retval) -	struct proc *p; -	struct ibcs2_readlink_args *uap; -	int *retval; -{ -        caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	return readlink(p, uap, retval); -} diff --git a/sys/i386/ibcs2/ibcs2_mount.h b/sys/i386/ibcs2/ibcs2_mount.h deleted file mode 100644 index d1b9aaaedc24b..0000000000000 --- a/sys/i386/ibcs2/ibcs2_mount.h +++ /dev/null @@ -1,41 +0,0 @@ -/*	$NetBSD: ibcs2_mount.h,v 1.2 1994/10/26 02:53:00 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_MOUNT_H -#define	_IBCS2_MOUNT_H - -#define IBCS2_MS_RDONLY	0x01 -#define IBCS2_MS_FSS	0x02 -#define IBCS2_MS_DATA	0x04 -#define IBCS2_MS_CACHE	0x08 - -#endif /* _IBCS2_MOUNT_H */ diff --git a/sys/i386/ibcs2/ibcs2_signal.c b/sys/i386/ibcs2/ibcs2_signal.c deleted file mode 100644 index ba768b0966acb..0000000000000 --- a/sys/i386/ibcs2/ibcs2_signal.c +++ /dev/null @@ -1,492 +0,0 @@ -/*	$NetBSD: ibcs2_signal.c,v 1.6 1995/09/19 22:19:07 thorpej Exp $	*/ - -/* - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/proc.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/mount.h> -#include <sys/kernel.h> -#include <sys/signal.h> -#include <sys/signalvar.h> -#include <sys/malloc.h> - -#include <sys/syscallargs.h> - -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> -#include <compat/ibcs2/ibcs2_util.h> - -#define sigemptyset(s)		bzero((s), sizeof(*(s))) -#define sigismember(s, n)	(*(s) & sigmask(n)) -#define sigaddset(s, n)		(*(s) |= sigmask(n)) - -#define	ibcs2_sigmask(n)	(1 << ((n) - 1)) -#define ibcs2_sigemptyset(s)	bzero((s), sizeof(*(s))) -#define ibcs2_sigismember(s, n)	(*(s) & ibcs2_sigmask(n)) -#define ibcs2_sigaddset(s, n)	(*(s) |= ibcs2_sigmask(n)) - -int bsd_to_ibcs2_sig[] = { -	0,			/* 0 */ -	IBCS2_SIGHUP,		/* 1 */ -	IBCS2_SIGINT,		/* 2 */ -	IBCS2_SIGQUIT,		/* 3 */ -	IBCS2_SIGILL,		/* 4 */ -	IBCS2_SIGTRAP,		/* 5 */ -	IBCS2_SIGABRT,		/* 6 */ -	IBCS2_SIGEMT,		/* 7 */ -	IBCS2_SIGFPE,		/* 8 */ -	IBCS2_SIGKILL,		/* 9 */ -	IBCS2_SIGBUS,		/* 10 */ -	IBCS2_SIGSEGV,		/* 11 */ -	IBCS2_SIGSYS,		/* 12 */ -	IBCS2_SIGPIPE,		/* 13 */ -	IBCS2_SIGALRM,		/* 14 */ -	IBCS2_SIGTERM,		/* 15 */ -	0,			/* 16 - SIGURG */ -	IBCS2_SIGSTOP,		/* 17 */ -	IBCS2_SIGTSTP,		/* 18 */ -	IBCS2_SIGCONT,		/* 19 */ -	IBCS2_SIGCLD,		/* 20 */ -	IBCS2_SIGTTIN,		/* 21 */ -	IBCS2_SIGTTOU,		/* 22 */ -	IBCS2_SIGPOLL,		/* 23 */ -	0,			/* 24 - SIGXCPU */ -	0,			/* 25 - SIGXFSZ */ -	IBCS2_SIGVTALRM,	/* 26 */ -	IBCS2_SIGPROF,		/* 27 */ -	IBCS2_SIGWINCH,		/* 28 */ -	0,			/* 29 */ -	IBCS2_SIGUSR1,		/* 30 */ -	IBCS2_SIGUSR2,		/* 31 */ -}; - -int ibcs2_to_bsd_sig[] = { -	0,			/* 0 */ -	SIGHUP,			/* 1 */ -	SIGINT,			/* 2 */ -	SIGQUIT,		/* 3 */ -	SIGILL,			/* 4 */ -	SIGTRAP,		/* 5 */ -	SIGABRT,		/* 6 */ -	SIGEMT,			/* 7 */ -	SIGFPE,			/* 8 */ -	SIGKILL,		/* 9 */ -	SIGBUS,			/* 10 */ -	SIGSEGV,		/* 11 */ -	SIGSYS,			/* 12 */ -	SIGPIPE,		/* 13 */ -	SIGALRM,		/* 14 */ -	SIGTERM,		/* 15 */ -	SIGUSR1,		/* 16 */ -	SIGUSR2,		/* 17 */ -	SIGCHLD,		/* 18 */ -	0,			/* 19 - SIGPWR */ -	SIGWINCH,		/* 20 */ -	0,			/* 21 */ -	SIGIO,			/* 22 */ -	SIGSTOP,		/* 23 */ -	SIGTSTP,		/* 24 */ -	SIGCONT,		/* 25 */ -	SIGTTIN,		/* 26 */ -	SIGTTOU,		/* 27 */ -	SIGVTALRM,		/* 28 */ -	SIGPROF,		/* 29 */ -	0,			/* 30 */ -	0,			/* 31 */ -}; - -void -ibcs2_to_bsd_sigset(iss, bss) -	const ibcs2_sigset_t *iss; -	sigset_t *bss; -{ -	int i, newsig; - -	sigemptyset(bss); -	for (i = 1; i < IBCS2_NSIG; i++) { -		if (ibcs2_sigismember(iss, i)) { -			newsig = ibcs2_to_bsd_sig[i]; -			if (newsig) -				sigaddset(bss, newsig); -		} -	} -} - -void -bsd_to_ibcs2_sigset(bss, iss) -	const sigset_t *bss; -	ibcs2_sigset_t *iss; -{ -	int i, newsig; - -	ibcs2_sigemptyset(iss); -	for (i = 1; i < NSIG; i++) { -		if (sigismember(bss, i)) { -			newsig = bsd_to_ibcs2_sig[i]; -			if (newsig) -				ibcs2_sigaddset(iss, newsig); -		} -	} -} - -void -ibcs2_to_bsd_sigaction(isa, bsa) -	struct ibcs2_sigaction *isa; -	struct sigaction *bsa; -{ - -	bsa->sa_handler = isa->sa_handler; -	ibcs2_to_bsd_sigset(&isa->sa_mask, &bsa->sa_mask); -	bsa->sa_flags = 0; -	if ((isa->sa_flags & IBCS2_SA_NOCLDSTOP) != 0) -		bsa->sa_flags |= SA_NOCLDSTOP; -} - -void -bsd_to_ibcs2_sigaction(bsa, isa) -	struct sigaction *bsa; -	struct ibcs2_sigaction *isa; -{ - -	isa->sa_handler = bsa->sa_handler; -	bsd_to_ibcs2_sigset(&bsa->sa_mask, &isa->sa_mask); -	isa->sa_flags = 0; -	if ((bsa->sa_flags & SA_NOCLDSTOP) != 0) -		isa->sa_flags |= SA_NOCLDSTOP; -} - -int -ibcs2_sigaction(p, v, retval) -	register struct proc *p; -	void *v; -	register_t *retval; -{ -	struct ibcs2_sigaction_args /* { -		syscallarg(int) sig; -		syscallarg(struct ibcs2_sigaction *) act; -		syscallarg(struct ibcs2_sigaction *) oact; -	} */ *uap = v; -	struct ibcs2_sigaction *nisa, *oisa, tmpisa; -	struct sigaction *nbsa, *obsa, tmpbsa; -	struct sigaction_args sa; -	caddr_t sg; -	int error; - -	sg = stackgap_init(p->p_emul); -	nisa = SCARG(uap, act); -	oisa = SCARG(uap, oact); - -	if (oisa != NULL) -		obsa = stackgap_alloc(&sg, sizeof(struct sigaction)); -	else -		obsa = NULL; - -	if (nisa != NULL) { -		nbsa = stackgap_alloc(&sg, sizeof(struct sigaction)); -		if ((error = copyin(nisa, &tmpisa, sizeof(tmpisa))) != 0) -			return error; -		ibcs2_to_bsd_sigaction(&tmpisa, &tmpbsa); -		if ((error = copyout(&tmpbsa, nbsa, sizeof(tmpbsa))) != 0) -			return error; -	} else -		nbsa = NULL; - -	SCARG(&sa, signum) = ibcs2_to_bsd_sig[SCARG(uap, sig)]; -	SCARG(&sa, nsa) = nbsa; -	SCARG(&sa, osa) = obsa; - -	if ((error = sigaction(p, &sa, retval)) != 0) -		return error; - -	if (oisa != NULL) { -		if ((error = copyin(obsa, &tmpbsa, sizeof(tmpbsa))) != 0) -			return error; -		bsd_to_ibcs2_sigaction(&tmpbsa, &tmpisa); -		if ((error = copyout(&tmpisa, oisa, sizeof(tmpisa))) != 0) -			return error; -	} - -	return 0; -} - -int -ibcs2_sigsys(p, v, retval) -	register struct proc *p; -	void *v; -	register_t *retval; -{ -	struct ibcs2_sigsys_args /* { -		syscallarg(int) sig; -		syscallarg(ibcs2_sig_t) fp; -	} */ *uap = v; -	int signum = ibcs2_to_bsd_sig[IBCS2_SIGNO(SCARG(uap, sig))]; -	int error; -	caddr_t sg = stackgap_init(p->p_emul); - -	if (signum <= 0 || signum >= IBCS2_NSIG) { -		if (IBCS2_SIGCALL(SCARG(uap, sig)) == IBCS2_SIGNAL_MASK || -		    IBCS2_SIGCALL(SCARG(uap, sig)) == IBCS2_SIGSET_MASK) -			*retval = (int)IBCS2_SIG_ERR; -		return EINVAL; -	} -	 -	switch (IBCS2_SIGCALL(SCARG(uap, sig))) { -	/* -	 * sigset is identical to signal() except that SIG_HOLD is allowed as -	 * an action. -	 */ -	case IBCS2_SIGSET_MASK: -		/* -		 * sigset is identical to signal() except -		 * that SIG_HOLD is allowed as -		 * an action. -		 */ -		if (SCARG(uap, fp) == IBCS2_SIG_HOLD) { -			struct sigprocmask_args sa; - -			SCARG(&sa, how) = SIG_BLOCK; -			SCARG(&sa, mask) = sigmask(signum); -			return sigprocmask(p, &sa, retval); -		} -		/* FALLTHROUGH */ - -	case IBCS2_SIGNAL_MASK: -		{ -			struct sigaction_args sa_args; -			struct sigaction *nbsa, *obsa, sa; - -			nbsa = stackgap_alloc(&sg, sizeof(struct sigaction)); -			obsa = stackgap_alloc(&sg, sizeof(struct sigaction)); -			SCARG(&sa_args, signum) = signum; -			SCARG(&sa_args, nsa) = nbsa; -			SCARG(&sa_args, osa) = obsa; - -			sa.sa_handler = SCARG(uap, fp); -			sigemptyset(&sa.sa_mask); -			sa.sa_flags = 0; -#if 0 -			if (signum != SIGALRM) -				sa.sa_flags = SA_RESTART; -#endif -			if ((error = copyout(&sa, nbsa, sizeof(sa))) != 0) -				return error; -			if ((error = sigaction(p, &sa_args, retval)) != 0) { -				DPRINTF(("signal: sigaction failed: %d\n", -					 error)); -				*retval = (int)IBCS2_SIG_ERR; -				return error; -			} -			if ((error = copyin(obsa, &sa, sizeof(sa))) != 0) -				return error; -			*retval = (int)sa.sa_handler; -			return 0; -		} -		 -	case IBCS2_SIGHOLD_MASK: -		{ -			struct sigprocmask_args sa; - -			SCARG(&sa, how) = SIG_BLOCK; -			SCARG(&sa, mask) = sigmask(signum); -			return sigprocmask(p, &sa, retval); -		} -		 -	case IBCS2_SIGRELSE_MASK: -		{ -			struct sigprocmask_args sa; - -			SCARG(&sa, how) = SIG_UNBLOCK; -			SCARG(&sa, mask) = sigmask(signum); -			return sigprocmask(p, &sa, retval); -		} -		 -	case IBCS2_SIGIGNORE_MASK: -		{ -			struct sigaction_args sa_args; -			struct sigaction *bsa, sa; - -			bsa = stackgap_alloc(&sg, sizeof(struct sigaction)); -			SCARG(&sa_args, signum) = signum; -			SCARG(&sa_args, nsa) = bsa; -			SCARG(&sa_args, osa) = NULL; - -			sa.sa_handler = SIG_IGN; -			sigemptyset(&sa.sa_mask); -			sa.sa_flags = 0; -			if ((error = copyout(&sa, bsa, sizeof(sa))) != 0) -				return error; -			if ((error = sigaction(p, &sa_args, retval)) != 0) { -				DPRINTF(("sigignore: sigaction failed\n")); -				return error; -			} -			return 0; -		} -		 -	case IBCS2_SIGPAUSE_MASK: -		{ -			struct sigsuspend_args sa; - -			SCARG(&sa, mask) = p->p_sigmask &~ sigmask(signum); -			return sigsuspend(p, &sa, retval); -		} -		 -	default: -		return ENOSYS; -	} -} - -int -ibcs2_sigprocmask(p, v, retval) -	register struct proc *p; -	void *v; -	register_t *retval; -{ -	struct ibcs2_sigprocmask_args /* { -		syscallarg(int) how; -		syscallarg(ibcs2_sigset_t *) set; -		syscallarg(ibcs2_sigset_t *) oset; -	} */ *uap = v; -	ibcs2_sigset_t iss; -	sigset_t bss; -	int error = 0; - -	if (SCARG(uap, oset) != NULL) { -		/* Fix the return value first if needed */ -		bsd_to_ibcs2_sigset(&p->p_sigmask, &iss); -		if ((error = copyout(&iss, SCARG(uap, oset), sizeof(iss))) != 0) -			return error; -	} -		 -	if (SCARG(uap, set) == NULL) -		/* Just examine */ -		return 0; - -	if ((error = copyin(SCARG(uap, set), &iss, sizeof(iss))) != 0) -		return error; - -	ibcs2_to_bsd_sigset(&iss, &bss); - -	(void) splhigh(); - -	switch (SCARG(uap, how)) { -	case IBCS2_SIG_BLOCK: -		p->p_sigmask |= bss & ~sigcantmask; -		break; - -	case IBCS2_SIG_UNBLOCK: -		p->p_sigmask &= ~bss; -		break; - -	case IBCS2_SIG_SETMASK: -		p->p_sigmask = bss & ~sigcantmask; -		break; - -	default: -		error = EINVAL; -		break; -	} - -	(void) spl0(); - -	return error; -} - -int -ibcs2_sigpending(p, v, retval) -	register struct proc *p; -	void *v; -	register_t *retval; -{ -	struct ibcs2_sigpending_args /* { -		syscallarg(ibcs2_sigset_t *) mask; -	} */ *uap = v; -	sigset_t bss; -	ibcs2_sigset_t iss; - -	bss = p->p_siglist & p->p_sigmask; -	bsd_to_ibcs2_sigset(&bss, &iss); - -	return copyout(&iss, SCARG(uap, mask), sizeof(iss)); -} - -int -ibcs2_sigsuspend(p, v, retval) -	register struct proc *p; -	void *v; -	register_t *retval; -{ -	struct ibcs2_sigsuspend_args /* { -		syscallarg(ibcs2_sigset_t *) mask; -	} */ *uap = v; -	ibcs2_sigset_t sss; -	sigset_t bss; -	struct sigsuspend_args sa; -	int error; - -	if ((error = copyin(SCARG(uap, mask), &sss, sizeof(sss))) != 0) -		return error; - -	ibcs2_to_bsd_sigset(&sss, &bss); - -	SCARG(&sa, mask) = bss; -	return sigsuspend(p, &sa, retval); -} - -int -ibcs2_pause(p, uap, retval) -	register struct proc *p; -	void *uap; -	register_t *retval; -{ -	struct sigsuspend_args bsa; - -	SCARG(&bsa, mask) = p->p_sigmask; -	return sigsuspend(p, &bsa, retval); -} - -int -ibcs2_kill(p, v, retval) -	register struct proc *p; -	void *v; -	register_t *retval; -{ -	struct ibcs2_kill_args /* { -		syscallarg(int) pid; -		syscallarg(int) signo; -	} */ *uap = v; -	struct kill_args ka; - -	SCARG(&ka, pid) = SCARG(uap, pid); -	SCARG(&ka, signum) = ibcs2_to_bsd_sig[SCARG(uap, signo)]; -	return kill(p, &ka, retval); -} diff --git a/sys/i386/ibcs2/ibcs2_signal.h b/sys/i386/ibcs2/ibcs2_signal.h deleted file mode 100644 index 2858688d79d80..0000000000000 --- a/sys/i386/ibcs2/ibcs2_signal.h +++ /dev/null @@ -1,105 +0,0 @@ -/*	$NetBSD: ibcs2_signal.h,v 1.7 1995/08/14 02:26:01 mycroft Exp $	*/ - -/* - * Copyright (c) 1994, 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_SIGNAL_H -#define	_IBCS2_SIGNAL_H - -#define IBCS2_SIGHUP		1 -#define IBCS2_SIGINT		2 -#define IBCS2_SIGQUIT		3 -#define IBCS2_SIGILL		4 -#define IBCS2_SIGTRAP		5 -#define IBCS2_SIGIOT		6 -#define IBCS2_SIGABRT		6 -#define IBCS2_SIGEMT		7 -#define IBCS2_SIGFPE		8 -#define IBCS2_SIGKILL		9 -#define IBCS2_SIGBUS		10 -#define IBCS2_SIGSEGV		11 -#define IBCS2_SIGSYS		12 -#define IBCS2_SIGPIPE		13 -#define IBCS2_SIGALRM		14 -#define IBCS2_SIGTERM		15 -#define IBCS2_SIGUSR1		16 -#define IBCS2_SIGUSR2		17 -#define IBCS2_SIGCLD		18 -#define IBCS2_SIGPWR		19 -#define IBCS2_SIGWINCH		20 -#define IBCS2_SIGPOLL		22 -#define IBCS2_NSIG		32 - -/* - * SCO-specific - */ -#define IBCS2_SIGSTOP		23 -#define IBCS2_SIGTSTP		24 -#define IBCS2_SIGCONT		25 -#define IBCS2_SIGTTIN		26 -#define IBCS2_SIGTTOU		27 -#define IBCS2_SIGVTALRM		28 -#define IBCS2_SIGPROF		29 - -#define IBCS2_SIGNO_MASK	0x00FF -#define IBCS2_SIGNAL_MASK	0x0000 -#define IBCS2_SIGSET_MASK	0x0100 -#define IBCS2_SIGHOLD_MASK	0x0200 -#define IBCS2_SIGRELSE_MASK	0x0400 -#define IBCS2_SIGIGNORE_MASK	0x0800 -#define IBCS2_SIGPAUSE_MASK	0x1000 - -#define IBCS2_SIGNO(x)		((x) & IBCS2_SIGNO_MASK) -#define IBCS2_SIGCALL(x)	((x) & ~IBCS2_SIGNO_MASK) - -#define IBCS2_SIG_DFL		(void(*)())0 -#define IBCS2_SIG_ERR		(void(*)())-1 -#define IBCS2_SIG_IGN		(void(*)())1 -#define IBCS2_SIG_HOLD		(void(*)())2 - -#define IBCS2_SIG_SETMASK	0 -#define IBCS2_SIG_BLOCK		1 -#define IBCS2_SIG_UNBLOCK	2 - -typedef long	ibcs2_sigset_t; -typedef void	(*ibcs2_sig_t) __P((int)); - -struct ibcs2_sigaction { -	ibcs2_sig_t	sa_handler; -	ibcs2_sigset_t	sa_mask; -	int		sa_flags; -}; - -/* sa_flags */ -#define IBCS2_SA_NOCLDSTOP	1 - -extern int bsd_to_ibcs2_sig[]; - -#endif /* _IBCS2_SIGNAL_H */ diff --git a/sys/i386/ibcs2/ibcs2_socksys.c b/sys/i386/ibcs2/ibcs2_socksys.c deleted file mode 100644 index 6cf0a8f0d6a9e..0000000000000 --- a/sys/i386/ibcs2/ibcs2_socksys.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 1994, 1995 Scott Bartram - * Copyright (c) 1994 Arne H Juul - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/termios.h> -#include <sys/tty.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <net/if.h> - -#include <compat/ibcs2/ibcs2_socksys.h> -#include <compat/ibcs2/ibcs2_util.h> - -/* - * iBCS2 socksys calls. - */ - -struct ibcs2_socksys_args { -	int     fd; -	int     magic; -	caddr_t argsp; -}; - -int -ibcs2_socksys(p, uap, retval) -	register struct proc *p; -	register struct ibcs2_socksys_args *uap; -	int *retval; -{ -	register struct filedesc *fdp = p->p_fd; -	register struct file *fp; -	int error; -	int realargs[7]; /* 1 for command, 6 for recvfrom */ -       -	/* -	 * SOCKET should only be legal on /dev/socksys. -	 * GETIPDOMAINNAME should only be legal on /dev/socksys ? -	 * The others are (and should be) only legal on sockets. -	 */ - -	if (error = copyin(uap->argsp, (caddr_t)realargs, sizeof(realargs))) -		return error; -	DPRINTF(("ibcs2_socksys: %08x %08x %08x %08x %08x %08x %08x\n", -	       realargs[0], realargs[1], realargs[2], realargs[3],  -	       realargs[4], realargs[5], realargs[6])); -	switch (realargs[0]) { -	case SOCKSYS_ACCEPT: -		return accept(p, realargs+1, retval); -	case SOCKSYS_BIND: -		return bind(p, realargs+1, retval); -	case SOCKSYS_CONNECT: -		return connect(p, realargs+1, retval); -	case SOCKSYS_GETPEERNAME: -		return getpeername(p, realargs+1, retval); -	case SOCKSYS_GETSOCKNAME: -		return getsockname(p, realargs+1, retval); -	case SOCKSYS_GETSOCKOPT: -		return getsockopt(p, realargs+1, retval); -	case SOCKSYS_LISTEN: -		return listen(p, realargs+1, retval); -	case SOCKSYS_RECV: -		realargs[5] = realargs[6] = 0; -		/* FALLTHROUGH */ -	case SOCKSYS_RECVFROM: -		return recvfrom(p, realargs+1, retval); -	case SOCKSYS_SEND: -		realargs[5] = realargs[6] = 0; -		/* FALLTHROUGH */ -	case SOCKSYS_SENDTO: -		return sendto(p, realargs+1, retval); -	case SOCKSYS_SETSOCKOPT: -		return setsockopt(p, realargs+1, retval); -	case SOCKSYS_SHUTDOWN: -		return shutdown(p, realargs+1, retval); -	case SOCKSYS_SOCKET: -		return socket(p, realargs+1, retval); -	case SOCKSYS_SELECT: -		return select(p, realargs+1, retval); -	case SOCKSYS_GETIPDOMAIN: -		return compat_09_getdomainname(p, realargs + 1, retval); -	case SOCKSYS_SETIPDOMAIN: -		return compat_09_setdomainname(p, realargs + 1, retval); -	case SOCKSYS_ADJTIME: -		return adjtime(p, realargs + 1, retval); -	case SOCKSYS_SETREUID: -		return compat_43_setreuid(p, realargs + 1, retval); -	case SOCKSYS_SETREGID: -		return compat_43_setregid(p, realargs + 1, retval); -	case SOCKSYS_GETTIME: -		return gettimeofday(p, realargs + 1, retval); -	case SOCKSYS_SETTIME: -		return settimeofday(p, realargs + 1, retval); -	case SOCKSYS_GETITIMER: -		return getitimer(p, realargs + 1, retval); -	case SOCKSYS_SETITIMER: -		return setitimer(p, realargs + 1, retval); - -	default: -		printf("socksys unknown %08x %08x %08x %08x %08x %08x %08x\n", -                       realargs[0], realargs[1], realargs[2], realargs[3],  -                       realargs[4], realargs[5], realargs[6]); -		return EINVAL; -	} -	/* NOTREACHED */ -} diff --git a/sys/i386/ibcs2/ibcs2_socksys.h b/sys/i386/ibcs2/ibcs2_socksys.h deleted file mode 100644 index bc89180b44b46..0000000000000 --- a/sys/i386/ibcs2/ibcs2_socksys.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 1994, 1995 Scott Bartram - * Copyright (c) 1994 Arne H Juul - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#ifndef _IBCS2_SOCKSYS_H -#define _IBCS2_SOCKSYS_H 1 - -#include <sys/ioccom.h> -#include <compat/ibcs2/ibcs2_types.h> - -#define SOCKSYS_ACCEPT		1 -#define SOCKSYS_BIND		2 -#define SOCKSYS_CONNECT		3 -#define SOCKSYS_GETPEERNAME	4 -#define SOCKSYS_GETSOCKNAME	5 -#define SOCKSYS_GETSOCKOPT	6 -#define SOCKSYS_LISTEN		7 -#define SOCKSYS_RECV		8 -#define SOCKSYS_RECVFROM	9 -#define SOCKSYS_SEND		10 -#define SOCKSYS_SENDTO		11 -#define SOCKSYS_SETSOCKOPT	12 -#define SOCKSYS_SHUTDOWN	13 -#define SOCKSYS_SOCKET		14 -#define SOCKSYS_SELECT		15 -#define SOCKSYS_GETIPDOMAIN	16 -#define SOCKSYS_SETIPDOMAIN	17 -#define SOCKSYS_ADJTIME		18 -#define SOCKSYS_SETREUID	19 -#define SOCKSYS_SETREGID	20 -#define SOCKSYS_GETTIME		21 -#define SOCKSYS_SETTIME		22 -#define SOCKSYS_GETITIMER	23 -#define SOCKSYS_SETITIMER	24 - -#define IBCS2_SIOCSHIWAT	_IOW('S', 1, int)	 -#define IBCS2_SIOCGHIWAT	_IOR('S', 2, int)	 -#define IBCS2_SIOCSLOWAT	_IOW('S', 3, int)	 -#define IBCS2_SIOCGLOWAT	_IOR('S', 4, int)	 -#define IBCS2_SIOCATMARK	_IOR('S', 5, int)	 -#define IBCS2_SIOCSPGRP		_IOW('S', 6, int)	 -#define IBCS2_SIOCGPGRP		_IOR('S', 7, int)	 -#define IBCS2_FIONREAD		_IOR('S', 8, int)	 -#define IBCS2_FIONBIO		_IOW('S', 9, int)	 -#define IBCS2_FIOASYNC		_IOW('S', 10, int)	 -#define IBCS2_SIOCPROTO		_IOW('S', 11, struct socknewproto)	 -#define IBCS2_SIOCGETNAME	_IOR('S', 12, struct sockaddr)	 -#define IBCS2_SIOCGETPEER	_IOR('S', 13, struct sockaddr)	 -#define IBCS2_IF_UNITSEL	_IOW('S', 14, int)	 -#define IBCS2_SIOCXPROTO	_IO('S', 15)	 - -#define IBCS2_SIOCADDRT		_IOW('R', 9, struct rtentry)	 -#define IBCS2_SIOCDELRT		_IOW('R', 10, struct rtentry)	 - -#define IBCS2_SIOCSIFADDR	_IOW('I', 11, struct ifreq)	 -#define IBCS2_SIOCGIFADDR	_IOWR('I', 12, struct ifreq)	 -#define IBCS2_SIOCSIFDSTADDR	_IOW('I', 13, struct ifreq)	 -#define IBCS2_SIOCGIFDSTADDR	_IOWR('I', 14, struct ifreq)	 -#define IBCS2_SIOCSIFFLAGS	_IOW('I', 15, struct ifreq)	 -#define IBCS2_SIOCGIFFLAGS	_IOWR('I', 16, struct ifreq)	 -#define IBCS2_SIOCGIFCONF	_IOWR('I', 17, struct ifconf)	 -#define IBCS2_SIOCSIFMTU	_IOW('I', 21, struct ifreq)	 -#define IBCS2_SIOCGIFMTU	_IOWR('I', 22, struct ifreq)	 -#define IBCS2_SIOCIFDETACH	_IOW('I', 26, struct ifreq)	 -#define IBCS2_SIOCGENPSTATS	_IOWR('I', 27, struct ifreq)	 -#define IBCS2_SIOCX25XMT	_IOWR('I', 29, struct ifreq) -#define IBCS2_SIOCX25RCV	_IOWR('I', 30, struct ifreq) -#define IBCS2_SIOCX25TBL	_IOWR('I', 31, struct ifreq) -#define IBCS2_SIOCGIFBRDADDR	_IOWR('I', 32, struct ifreq)	 -#define IBCS2_SIOCSIFBRDADDR	_IOW('I', 33, struct ifreq)	 -#define IBCS2_SIOCGIFNETMASK	_IOWR('I', 34, struct ifreq)	 -#define IBCS2_SIOCSIFNETMASK	_IOW('I', 35, struct ifreq)	 -#define IBCS2_SIOCGIFMETRIC	_IOWR('I', 36, struct ifreq)	 -#define IBCS2_SIOCSIFMETRIC	_IOW('I', 37, struct ifreq)	 -#define IBCS2_SIOCSARP		_IOW('I', 38, struct arpreq)	 -#define IBCS2_SIOCGARP		_IOWR('I', 39, struct arpreq)	 -#define IBCS2_SIOCDARP		_IOW('I', 40, struct arpreq)	 -#define IBCS2_SIOCSIFNAME	_IOW('I', 41, struct ifreq)	 -#define IBCS2_SIOCGIFONEP	_IOWR('I', 42, struct ifreq)	 -#define IBCS2_SIOCSIFONEP	_IOW('I', 43, struct ifreq)	 -#define IBCS2_SIOCGENADDR	_IOWR('I', 65, struct ifreq)	 -#define IBCS2_SIOCSOCKSYS	_IOW('I', 66, struct socksysreq)	 - -struct socksysreq { -	int realargs[7]; -}; - -struct socknewproto { -	int family; -	int type; -	int proto; -	ibcs2_dev_t dev; -	int flags; -}; - -#endif /* _IBCS2_SOCKSYS_H */ diff --git a/sys/i386/ibcs2/ibcs2_stat.c b/sys/i386/ibcs2/ibcs2_stat.c deleted file mode 100644 index a9d5c4bb0f9f6..0000000000000 --- a/sys/i386/ibcs2/ibcs2_stat.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/kernel.h> -#include <sys/mount.h> -#include <sys/malloc.h> -#include <sys/vnode.h> -#include <sys/syscallargs.h> - -#include <vm/vm.h> - -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_fcntl.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_stat.h> -#include <compat/ibcs2/ibcs2_statfs.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> -#include <compat/ibcs2/ibcs2_ustat.h> -#include <compat/ibcs2/ibcs2_util.h> -#include <compat/ibcs2/ibcs2_utsname.h> - - -static void -bsd_stat2ibcs_stat(st, st4) -	struct ostat *st; -	struct ibcs2_stat *st4; -{ -	bzero(st4, sizeof(*st4)); -	st4->st_dev = (ibcs2_dev_t)st->st_dev; -	st4->st_ino = (ibcs2_ino_t)st->st_ino; -	st4->st_mode = (ibcs2_mode_t)st->st_mode; -	st4->st_nlink = (ibcs2_nlink_t)st->st_nlink; -	st4->st_uid = (ibcs2_uid_t)st->st_uid; -	st4->st_gid = (ibcs2_gid_t)st->st_gid; -	st4->st_rdev = (ibcs2_dev_t)st->st_rdev; -	st4->st_size = (ibcs2_off_t)st->st_size; -	st4->st_atim = (ibcs2_time_t)st->st_atime; -	st4->st_mtim = (ibcs2_time_t)st->st_mtime; -	st4->st_ctim = (ibcs2_time_t)st->st_ctime; -} - -static int -cvt_statfs(sp, buf, len) -	struct statfs *sp; -	caddr_t buf; -	int len; -{ -	struct ibcs2_statfs ssfs; - -	bzero(&ssfs, sizeof ssfs); -	ssfs.f_fstyp = 0; -	ssfs.f_bsize = sp->f_bsize; -	ssfs.f_frsize = 0; -	ssfs.f_blocks = sp->f_blocks; -	ssfs.f_bfree = sp->f_bfree; -	ssfs.f_files = sp->f_files; -	ssfs.f_ffree = sp->f_ffree; -	ssfs.f_fname[0] = 0; -	ssfs.f_fpack[0] = 0; -	return copyout((caddr_t)&ssfs, buf, len); -}	 - -int -ibcs2_statfs(p, uap, retval) -	struct proc *p; -	struct ibcs2_statfs_args *uap; -	int *retval; -{ -	register struct mount *mp; -	register struct statfs *sp; -	int error; -	struct nameidata nd; -	caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, path), p); -	if (error = namei(&nd)) -		return (error); -	mp = nd.ni_vp->v_mount; -	sp = &mp->mnt_stat; -	vrele(nd.ni_vp); -	if (error = VFS_STATFS(mp, sp, p)) -		return (error); -	sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; -	return cvt_statfs(sp, (caddr_t)SCARG(uap, buf), SCARG(uap, len)); -} - -int -ibcs2_fstatfs(p, uap, retval) -	struct proc *p; -	struct ibcs2_fstatfs_args *uap; -	int *retval; -{ -	struct file *fp; -	struct mount *mp; -	register struct statfs *sp; -	int error; - -	if (error = getvnode(p->p_fd, SCARG(uap, fd), &fp)) -		return (error); -	mp = ((struct vnode *)fp->f_data)->v_mount; -	sp = &mp->mnt_stat; -	if (error = VFS_STATFS(mp, sp, p)) -		return (error); -	sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; -	return cvt_statfs(sp, (caddr_t)SCARG(uap, buf), SCARG(uap, len)); -} - -int -ibcs2_stat(p, uap, retval) -	struct proc *p; -	struct ibcs2_stat_args *uap; -	int *retval; -{ -	struct ostat st; -	struct ibcs2_stat ibcs2_st; -	struct compat_43_stat_args cup; -	int error; -	caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	SCARG(&cup, path) = SCARG(uap, path); -	SCARG(&cup, ub) = stackgap_alloc(&sg, sizeof(st)); -	if (error = compat_43_stat(p, &cup, retval)) -		return error; -	if (error = copyin(SCARG(&cup, ub), &st, sizeof(st))) -		return error; -	bsd_stat2ibcs_stat(&st, &ibcs2_st); -	return copyout((caddr_t)&ibcs2_st, (caddr_t)SCARG(uap, st), -		       ibcs2_stat_len); -} - -int -ibcs2_lstat(p, uap, retval) -	struct proc *p; -	struct ibcs2_lstat_args *uap; -	int *retval; -{ -	struct ostat st; -	struct ibcs2_stat ibcs2_st; -	struct compat_43_lstat_args cup; -	int error; -	caddr_t sg = stackgap_init(); - -	CHECKALTEXIST(p, &sg, SCARG(uap, path)); -	SCARG(&cup, path) = SCARG(uap, path); -	SCARG(&cup, ub) = stackgap_alloc(&sg, sizeof(st)); -	if (error = compat_43_lstat(p, &cup, retval)) -		return error; -	if (error = copyin(SCARG(&cup, ub), &st, sizeof(st))) -		return error; -	bsd_stat2ibcs_stat(&st, &ibcs2_st); -	return copyout((caddr_t)&ibcs2_st, (caddr_t)SCARG(uap, st), -		       ibcs2_stat_len); -} - -int -ibcs2_fstat(p, uap, retval) -	struct proc *p; -	struct ibcs2_fstat_args *uap; -	int *retval; -{ -	struct ostat st; -	struct ibcs2_stat ibcs2_st; -	struct compat_43_fstat_args cup; -	int error; -	caddr_t sg = stackgap_init(); - -	SCARG(&cup, fd) = SCARG(uap, fd); -	SCARG(&cup, sb) = stackgap_alloc(&sg, sizeof(st)); -	if (error = compat_43_fstat(p, &cup, retval)) -		return error; -	if (error = copyin(SCARG(&cup, sb), &st, sizeof(st))) -		return error; -	bsd_stat2ibcs_stat(&st, &ibcs2_st); -	return copyout((caddr_t)&ibcs2_st, (caddr_t)SCARG(uap, st), -		       ibcs2_stat_len); -} - -int -ibcs2_utssys(p, uap, retval) -	struct proc *p; -	struct ibcs2_utssys_args *uap; -	int *retval; -{ -	switch (SCARG(uap, flag)) { -	case 0:			/* uname(2) */ -	{ -		struct ibcs2_utsname sut; -		extern char ostype[], machine[], osrelease[]; - -		bzero(&sut, ibcs2_utsname_len); -		bcopy(ostype, sut.sysname, sizeof(sut.sysname) - 1); -		bcopy(hostname, sut.nodename, sizeof(sut.nodename)); -		sut.nodename[sizeof(sut.nodename)-1] = '\0'; -		bcopy(osrelease, sut.release, sizeof(sut.release) - 1); -		bcopy("1", sut.version, sizeof(sut.version) - 1); -		bcopy(machine, sut.machine, sizeof(sut.machine) - 1); - -		return copyout((caddr_t)&sut, (caddr_t)SCARG(uap, a1), -			       ibcs2_utsname_len); -	} - -	case 2:			/* ustat(2) */ -	{ -		return ENOSYS;	/* XXX - TODO */ -	} - -	default: -		return ENOSYS; -	} -} diff --git a/sys/i386/ibcs2/ibcs2_stat.h b/sys/i386/ibcs2/ibcs2_stat.h deleted file mode 100644 index 2eb01027e0cc4..0000000000000 --- a/sys/i386/ibcs2/ibcs2_stat.h +++ /dev/null @@ -1,89 +0,0 @@ -/*	$NetBSD: ibcs2_stat.h,v 1.2 1994/10/26 02:53:03 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_STAT_H -#define	_IBCS2_STAT_H - -#include <compat/ibcs2/ibcs2_types.h> - -struct ibcs2_stat { -	ibcs2_dev_t	st_dev; -	ibcs2_ino_t	st_ino; -	ibcs2_mode_t	st_mode; -	ibcs2_nlink_t	st_nlink; -	ibcs2_uid_t	st_uid; -	ibcs2_gid_t	st_gid; -	ibcs2_dev_t	st_rdev; -	ibcs2_off_t	st_size; -	ibcs2_time_t	st_atim; -	ibcs2_time_t	st_mtim; -	ibcs2_time_t	st_ctim; -}; - -#define ibcs2_stat_len	(sizeof(struct ibcs2_stat)) - -#define IBCS2_S_IFMT		0xf000 -#define IBCS2_S_IFIFO		0x1000 -#define IBCS2_S_IFCHR		0x2000 -#define IBCS2_S_IFDIR		0x4000 -#define IBCS2_S_IFBLK		0x6000 -#define IBCS2_S_IFREG		0x8000 -#define IBCS2_S_IFSOCK		0xc000 - -#define IBCS2_S_IFNAM		0x5000 -#define IBCS2_S_IFLNK		0xa000 - -#define IBCS2_S_ISUID		0x0800 -#define IBCS2_S_ISGID		0x0400 -#define IBCS2_S_ISVTX		0x0200 - -#define IBCS2_S_IRWXU		0x01c0 -#define IBCS2_S_IRUSR		0x0100 -#define IBCS2_S_IWUSR		0x0080 -#define IBCS2_S_IXUSR		0x0040 -#define IBCS2_S_IRWXG		0x0038 -#define IBCS2_S_IRGRP		0x0020 -#define IBCS2_S_IWGRP		0x000f -#define IBCS2_S_IXGRP		0x0008 -#define IBCS2_S_IRWXO		0x0007 -#define IBCS2_S_IROTH		0x0004 -#define IBCS2_S_IWOTH		0x0002 -#define IBCS2_S_IXOTH		0x0001 - -#define IBCS2_S_ISFIFO(mode)	(((mode) & IBCS2_S_IFMT) == IBCS2_S_IFIFO) -#define IBCS2_S_ISCHR(mode)	(((mode) & IBCS2_S_IFMT) == IBCS2_S_IFCHR) -#define IBCS2_S_ISDIR(mode)	(((mode) & IBCS2_S_IFMT) == IBCS2_S_IFDIR) -#define IBCS2_S_ISBLK(mode)	(((mode) & IBCS2_S_IFMT) == IBCS2_S_IFBLK) -#define IBCS2_S_ISREG(mode)	(((mode) & IBCS2_S_IFMT) == IBCS2_S_IFREG) -#define IBCS2_S_ISSOCK(mode)	(((mode) & IBCS2_S_IFMT) == IBCS2_S_IFSOCK) - -#endif /* _IBCS2_STAT_H */ diff --git a/sys/i386/ibcs2/ibcs2_statfs.h b/sys/i386/ibcs2/ibcs2_statfs.h deleted file mode 100644 index d6e0100c1eb9f..0000000000000 --- a/sys/i386/ibcs2/ibcs2_statfs.h +++ /dev/null @@ -1,48 +0,0 @@ -/*	$NetBSD: ibcs2_statfs.h,v 1.2 1994/10/26 02:53:06 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_STATFS_H -#define	_IBCS2_STATFS_H - -struct ibcs2_statfs { -	short	f_fstyp; -	long	f_bsize; -	long	f_frsize; -	long	f_blocks; -	long	f_bfree; -	long	f_files; -	long	f_ffree; -	char	f_fname[6]; -	char	f_fpack[6]; -}; - -#endif /* _IBCS2_STATFS_H */ diff --git a/sys/i386/ibcs2/ibcs2_stropts.h b/sys/i386/ibcs2/ibcs2_stropts.h deleted file mode 100644 index 4d26e73582656..0000000000000 --- a/sys/i386/ibcs2/ibcs2_stropts.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * ibcs2_stropts.h - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _IBCS2_STROPTS_H -#define _IBCS2_STROPTS_H - -#define IBCS2_STR		('S'<<8) -#define IBCS2_I_NREAD		(IBCS2_STR|01) -#define IBCS2_I_PUSH		(IBCS2_STR|02) -#define IBCS2_I_POP		(IBCS2_STR|03) -#define IBCS2_I_LOOK		(IBCS2_STR|04) -#define IBCS2_I_FLUSH		(IBCS2_STR|05) -#define IBCS2_I_SRDOPT		(IBCS2_STR|06) -#define IBCS2_I_GRDOPT		(IBCS2_STR|07) -#define IBCS2_I_STR		(IBCS2_STR|010) -#define IBCS2_I_SETSIG		(IBCS2_STR|011) -#define IBCS2_I_GETSIG		(IBCS2_STR|012) -#define IBCS2_I_FIND		(IBCS2_STR|013) -#define IBCS2_I_LINK		(IBCS2_STR|014) -#define IBCS2_I_UNLINK		(IBCS2_STR|015) -#define IBCS2_I_PEEK		(IBCS2_STR|017) -#define IBCS2_I_FDINSERT	(IBCS2_STR|020) -#define IBCS2_I_SENDFD		(IBCS2_STR|021) -#define IBCS2_I_RECVFD		(IBCS2_STR|022) - -#endif /* _IBCS2_STROPTS_H */ diff --git a/sys/i386/ibcs2/ibcs2_syscall.h b/sys/i386/ibcs2/ibcs2_syscall.h deleted file mode 100644 index f02ad42422042..0000000000000 --- a/sys/i386/ibcs2/ibcs2_syscall.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * System call numbers. - * - * DO NOT EDIT-- this file is automatically generated. - * created from	NetBSD: syscalls.master,v 1.4 1995/03/14 15:12:52 scottb Exp  - */ - -#define	IBCS2_SYS_syscall	0 -#define	IBCS2_SYS_exit	1 -#define	IBCS2_SYS_fork	2 -#define	IBCS2_SYS_ibcs2_read	3 -#define	IBCS2_SYS_write	4 -#define	IBCS2_SYS_ibcs2_open	5 -#define	IBCS2_SYS_close	6 -#define	IBCS2_SYS_ibcs2_waitsys	7 -#define	IBCS2_SYS_ibcs2_creat	8 -#define	IBCS2_SYS_link	9 -#define	IBCS2_SYS_ibcs2_unlink	10 -#define	IBCS2_SYS_ibcs2_execv	11 -#define	IBCS2_SYS_ibcs2_chdir	12 -#define	IBCS2_SYS_ibcs2_time	13 -#define	IBCS2_SYS_ibcs2_mknod	14 -#define	IBCS2_SYS_ibcs2_chmod	15 -#define	IBCS2_SYS_ibcs2_chown	16 -#define	IBCS2_SYS_obreak	17 -#define	IBCS2_SYS_ibcs2_stat	18 -#define	IBCS2_SYS_compat_43_lseek	19 -#define	IBCS2_SYS_getpid	20 -#define	IBCS2_SYS_ibcs2_mount	21 -#define	IBCS2_SYS_ibcs2_umount	22 -#define	IBCS2_SYS_ibcs2_setuid	23 -#define	IBCS2_SYS_getuid	24 -#define	IBCS2_SYS_ibcs2_stime	25 -#define	IBCS2_SYS_ibcs2_alarm	27 -#define	IBCS2_SYS_ibcs2_fstat	28 -#define	IBCS2_SYS_ibcs2_pause	29 -#define	IBCS2_SYS_ibcs2_utime	30 -#define	IBCS2_SYS_ibcs2_access	33 -#define	IBCS2_SYS_ibcs2_nice	34 -#define	IBCS2_SYS_ibcs2_statfs	35 -#define	IBCS2_SYS_sync	36 -#define	IBCS2_SYS_ibcs2_kill	37 -#define	IBCS2_SYS_ibcs2_fstatfs	38 -#define	IBCS2_SYS_ibcs2_pgrpsys	39 -#define	IBCS2_SYS_dup	41 -#define	IBCS2_SYS_pipe	42 -#define	IBCS2_SYS_ibcs2_times	43 -#define	IBCS2_SYS_ibcs2_plock	45 -#define	IBCS2_SYS_ibcs2_setgid	46 -#define	IBCS2_SYS_getgid	47 -#define	IBCS2_SYS_ibcs2_sigsys	48 -#define	IBCS2_SYS_ibcs2_msgsys	49 -#define	IBCS2_SYS_ibcs2_shmsys	52 -#define	IBCS2_SYS_ibcs2_semsys	53 -#define	IBCS2_SYS_ibcs2_ioctl	54 -#define	IBCS2_SYS_ibcs2_uadmin	55 -#define	IBCS2_SYS_ibcs2_utssys	57 -#define	IBCS2_SYS_ibcs2_execve	59 -#define	IBCS2_SYS_umask	60 -#define	IBCS2_SYS_chroot	61 -#define	IBCS2_SYS_ibcs2_fcntl	62 -#define	IBCS2_SYS_ibcs2_ulimit	63 -				/* 70 is obsolete rfs_advfs */ -				/* 71 is obsolete rfs_unadvfs */ -				/* 72 is obsolete rfs_rmount */ -				/* 73 is obsolete rfs_rumount */ -				/* 74 is obsolete rfs_rfstart */ -				/* 75 is obsolete rfs_sigret */ -				/* 76 is obsolete rfs_rdebug */ -				/* 77 is obsolete rfs_rfstop */ -#define	IBCS2_SYS_ibcs2_rmdir	79 -#define	IBCS2_SYS_ibcs2_mkdir	80 -#define	IBCS2_SYS_ibcs2_getdents	81 -#define	IBCS2_SYS_ibcs2_sysfs	84 -#define	IBCS2_SYS_ibcs2_getmsg	85 -#define	IBCS2_SYS_ibcs2_putmsg	86 -#define	IBCS2_SYS_ibcs2_poll	87 -#define	IBCS2_SYS_ibcs2_symlink	90 -#define	IBCS2_SYS_ibcs2_lstat	91 -#define	IBCS2_SYS_ibcs2_readlink	92 -#define	IBCS2_SYS_sigreturn	103 -#define	IBCS2_SYS_xenix_rdchk	135 -#define	IBCS2_SYS_xenix_chsize	138 -#define	IBCS2_SYS_xenix_ftime	139 -#define	IBCS2_SYS_xenix_nap	140 -#define	IBCS2_SYS_select	164 -#define	IBCS2_SYS_ibcs2_sigaction	167 -#define	IBCS2_SYS_ibcs2_sigprocmask	168 -#define	IBCS2_SYS_ibcs2_sigpending	169 -#define	IBCS2_SYS_ibcs2_sigsuspend	170 -#define	IBCS2_SYS_ibcs2_getgroups	171 -#define	IBCS2_SYS_ibcs2_setgroups	172 -#define	IBCS2_SYS_ibcs2_sysconf	173 -#define	IBCS2_SYS_ibcs2_pathconf	174 -#define	IBCS2_SYS_ibcs2_fpathconf	175 -#define	IBCS2_SYS_ibcs2_rename	176 -#define	IBCS2_SYS_MAXSYSCALL	177 diff --git a/sys/i386/ibcs2/ibcs2_sysent.c b/sys/i386/ibcs2/ibcs2_sysent.c deleted file mode 100644 index c7e9fb3382145..0000000000000 --- a/sys/i386/ibcs2/ibcs2_sysent.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * System call switch table. - * - * DO NOT EDIT-- this file is automatically generated. - * created from	NetBSD: syscalls.master,v 1.4 1995/03/14 15:12:52 scottb Exp  - */ - -#include <sys/param.h> -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_statfs.h> -#include <sys/systm.h> -#include <sys/signal.h> -#include <sys/mount.h> -#include <sys/syscallargs.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> -int	nosys(); -int	exit(); -int	fork(); -int	ibcs2_read(); -int	write(); -int	ibcs2_open(); -int	close(); -int	ibcs2_waitsys(); -int	ibcs2_creat(); -int	link(); -int	ibcs2_unlink(); -int	ibcs2_execv(); -int	ibcs2_chdir(); -int	ibcs2_time(); -int	ibcs2_mknod(); -int	ibcs2_chmod(); -int	ibcs2_chown(); -int	obreak(); -int	ibcs2_stat(); -int	compat_43_lseek(); -int	getpid(); -int	ibcs2_mount(); -int	ibcs2_umount(); -int	ibcs2_setuid(); -int	getuid(); -int	ibcs2_stime(); -int	ibcs2_alarm(); -int	ibcs2_fstat(); -int	ibcs2_pause(); -int	ibcs2_utime(); -int	ibcs2_access(); -int	ibcs2_nice(); -int	ibcs2_statfs(); -int	sync(); -int	ibcs2_kill(); -int	ibcs2_fstatfs(); -int	ibcs2_pgrpsys(); -int	dup(); -int	pipe(); -int	ibcs2_times(); -int	ibcs2_plock(); -int	ibcs2_setgid(); -int	getgid(); -int	ibcs2_sigsys(); -#ifdef SYSVMSG -int	ibcs2_msgsys(); -#else -#endif -#ifdef SYSVSHM -int	ibcs2_shmsys(); -#else -#endif -#ifdef SYSVSEM -int	ibcs2_semsys(); -#else -#endif -int	ibcs2_ioctl(); -int	ibcs2_uadmin(); -int	ibcs2_utssys(); -int	ibcs2_execve(); -int	umask(); -int	chroot(); -int	ibcs2_fcntl(); -int	ibcs2_ulimit(); -int	ibcs2_rmdir(); -int	ibcs2_mkdir(); -int	ibcs2_getdents(); -int	ibcs2_sysfs(); -int	ibcs2_getmsg(); -int	ibcs2_putmsg(); -int	ibcs2_poll(); -int	ibcs2_symlink(); -int	ibcs2_lstat(); -int	ibcs2_readlink(); -int	sigreturn(); -int	xenix_rdchk(); -int	xenix_chsize(); -int	xenix_ftime(); -int	xenix_nap(); -int	select(); -int	ibcs2_sigaction(); -int	ibcs2_sigprocmask(); -int	ibcs2_sigpending(); -int	ibcs2_sigsuspend(); -int	ibcs2_getgroups(); -int	ibcs2_setgroups(); -int	ibcs2_sysconf(); -int	ibcs2_pathconf(); -int	ibcs2_fpathconf(); -int	ibcs2_rename(); - -#ifdef COMPAT_43 -#define compat_43(func) __CONCAT(compat_43_,func) - -#ifdef SYSVMSG -#else -#endif -#ifdef SYSVSHM -#else -#endif -#ifdef SYSVSEM -#else -#endif - -#else /* COMPAT_43 */ -#define compat_43(func) nosys -#endif /* COMPAT_43 */ - - -#ifdef COMPAT_09 -#define compat_09(func) __CONCAT(compat_09_,func) - -#ifdef SYSVMSG -#else -#endif -#ifdef SYSVSHM -#else -#endif -#ifdef SYSVSEM -#else -#endif - -#else /* COMPAT_09 */ -#define compat_09(func) nosys -#endif /* COMPAT_09 */ - - -#ifdef COMPAT_10 -#define compat_10(func) __CONCAT(compat_10_,func) - -#ifdef SYSVMSG -#else -#endif -#ifdef SYSVSHM -#else -#endif -#ifdef SYSVSEM -#else -#endif - -#else /* COMPAT_10 */ -#define compat_10(func) nosys -#endif /* COMPAT_10 */ - -#define	s(type)	sizeof(type) - -struct sysent ibcs2_sysent[] = { -	{ 0, 0, -	    nosys },				/* 0 = syscall */ -	{ 1, s(struct exit_args), -	    exit },				/* 1 = exit */ -	{ 0, 0, -	    fork },				/* 2 = fork */ -	{ 3, s(struct ibcs2_read_args), -	    ibcs2_read },			/* 3 = ibcs2_read */ -	{ 3, s(struct write_args), -	    write },				/* 4 = write */ -	{ 3, s(struct ibcs2_open_args), -	    ibcs2_open },			/* 5 = ibcs2_open */ -	{ 1, s(struct close_args), -	    close },				/* 6 = close */ -	{ 3, s(struct ibcs2_waitsys_args), -	    ibcs2_waitsys },			/* 7 = ibcs2_waitsys */ -	{ 2, s(struct ibcs2_creat_args), -	    ibcs2_creat },			/* 8 = ibcs2_creat */ -	{ 2, s(struct link_args), -	    link },				/* 9 = link */ -	{ 1, s(struct ibcs2_unlink_args), -	    ibcs2_unlink },			/* 10 = ibcs2_unlink */ -	{ 2, s(struct ibcs2_execv_args), -	    ibcs2_execv },			/* 11 = ibcs2_execv */ -	{ 1, s(struct ibcs2_chdir_args), -	    ibcs2_chdir },			/* 12 = ibcs2_chdir */ -	{ 1, s(struct ibcs2_time_args), -	    ibcs2_time },			/* 13 = ibcs2_time */ -	{ 3, s(struct ibcs2_mknod_args), -	    ibcs2_mknod },			/* 14 = ibcs2_mknod */ -	{ 2, s(struct ibcs2_chmod_args), -	    ibcs2_chmod },			/* 15 = ibcs2_chmod */ -	{ 3, s(struct ibcs2_chown_args), -	    ibcs2_chown },			/* 16 = ibcs2_chown */ -	{ 1, s(struct obreak_args), -	    obreak },				/* 17 = obreak */ -	{ 2, s(struct ibcs2_stat_args), -	    ibcs2_stat },			/* 18 = ibcs2_stat */ -	{ 3, s(struct compat_43_lseek_args), -	    compat_43_lseek },			/* 19 = compat_43_lseek */ -	{ 0, 0, -	    getpid },				/* 20 = getpid */ -	{ 6, s(struct ibcs2_mount_args), -	    ibcs2_mount },			/* 21 = ibcs2_mount */ -	{ 1, s(struct ibcs2_umount_args), -	    ibcs2_umount },			/* 22 = ibcs2_umount */ -	{ 1, s(struct ibcs2_setuid_args), -	    ibcs2_setuid },			/* 23 = ibcs2_setuid */ -	{ 0, 0, -	    getuid },				/* 24 = getuid */ -	{ 1, s(struct ibcs2_stime_args), -	    ibcs2_stime },			/* 25 = ibcs2_stime */ -	{ 0, 0, -	    nosys },				/* 26 = unimplemented ibcs2_ptrace */ -	{ 1, s(struct ibcs2_alarm_args), -	    ibcs2_alarm },			/* 27 = ibcs2_alarm */ -	{ 2, s(struct ibcs2_fstat_args), -	    ibcs2_fstat },			/* 28 = ibcs2_fstat */ -	{ 0, 0, -	    ibcs2_pause },			/* 29 = ibcs2_pause */ -	{ 2, s(struct ibcs2_utime_args), -	    ibcs2_utime },			/* 30 = ibcs2_utime */ -	{ 0, 0, -	    nosys },				/* 31 = unimplemented was stty */ -	{ 0, 0, -	    nosys },				/* 32 = unimplemented was gtty */ -	{ 2, s(struct ibcs2_access_args), -	    ibcs2_access },			/* 33 = ibcs2_access */ -	{ 1, s(struct ibcs2_nice_args), -	    ibcs2_nice },			/* 34 = ibcs2_nice */ -	{ 4, s(struct ibcs2_statfs_args), -	    ibcs2_statfs },			/* 35 = ibcs2_statfs */ -	{ 0, 0, -	    sync },				/* 36 = sync */ -	{ 2, s(struct ibcs2_kill_args), -	    ibcs2_kill },			/* 37 = ibcs2_kill */ -	{ 4, s(struct ibcs2_fstatfs_args), -	    ibcs2_fstatfs },			/* 38 = ibcs2_fstatfs */ -	{ 4, s(struct ibcs2_pgrpsys_args), -	    ibcs2_pgrpsys },			/* 39 = ibcs2_pgrpsys */ -	{ 0, 0, -	    nosys },				/* 40 = unimplemented ibcs2_xenix */ -	{ 1, s(struct dup_args), -	    dup },				/* 41 = dup */ -	{ 0, 0, -	    pipe },				/* 42 = pipe */ -	{ 1, s(struct ibcs2_times_args), -	    ibcs2_times },			/* 43 = ibcs2_times */ -	{ 0, 0, -	    nosys },				/* 44 = unimplemented profil */ -	{ 1, s(struct ibcs2_plock_args), -	    ibcs2_plock },			/* 45 = ibcs2_plock */ -	{ 1, s(struct ibcs2_setgid_args), -	    ibcs2_setgid },			/* 46 = ibcs2_setgid */ -	{ 0, 0, -	    getgid },				/* 47 = getgid */ -	{ 2, s(struct ibcs2_sigsys_args), -	    ibcs2_sigsys },			/* 48 = ibcs2_sigsys */ -#ifdef SYSVMSG -	{ 6, s(struct ibcs2_msgsys_args), -	    ibcs2_msgsys },			/* 49 = ibcs2_msgsys */ -#else -	{ 0, 0, -	    nosys },				/* 49 = unimplemented nosys */ -#endif -	{ 0, 0, -	    nosys },				/* 50 = unimplemented ibcs2_sys3b */ -	{ 0, 0, -	    nosys },				/* 51 = unimplemented ibcs2_acct */ -#ifdef SYSVSHM -	{ 4, s(struct ibcs2_shmsys_args), -	    ibcs2_shmsys },			/* 52 = ibcs2_shmsys */ -#else -	{ 0, 0, -	    nosys },				/* 52 = unimplemented nosys */ -#endif -#ifdef SYSVSEM -	{ 5, s(struct ibcs2_semsys_args), -	    ibcs2_semsys },			/* 53 = ibcs2_semsys */ -#else -	{ 0, 0, -	    nosys },				/* 53 = unimplemented nosys */ -#endif -	{ 3, s(struct ibcs2_ioctl_args), -	    ibcs2_ioctl },			/* 54 = ibcs2_ioctl */ -	{ 3, s(struct ibcs2_uadmin_args), -	    ibcs2_uadmin },			/* 55 = ibcs2_uadmin */ -	{ 0, 0, -	    nosys },				/* 56 = unimplemented nosys */ -	{ 3, s(struct ibcs2_utssys_args), -	    ibcs2_utssys },			/* 57 = ibcs2_utssys */ -	{ 0, 0, -	    nosys },				/* 58 = unimplemented nosys */ -	{ 3, s(struct ibcs2_execve_args), -	    ibcs2_execve },			/* 59 = ibcs2_execve */ -	{ 1, s(struct umask_args), -	    umask },				/* 60 = umask */ -	{ 1, s(struct chroot_args), -	    chroot },				/* 61 = chroot */ -	{ 3, s(struct ibcs2_fcntl_args), -	    ibcs2_fcntl },			/* 62 = ibcs2_fcntl */ -	{ 2, s(struct ibcs2_ulimit_args), -	    ibcs2_ulimit },			/* 63 = ibcs2_ulimit */ -	{ 0, 0, -	    nosys },				/* 64 = unimplemented reserved for unix/pc */ -	{ 0, 0, -	    nosys },				/* 65 = unimplemented reserved for unix/pc */ -	{ 0, 0, -	    nosys },				/* 66 = unimplemented reserved for unix/pc */ -	{ 0, 0, -	    nosys },				/* 67 = unimplemented reserved for unix/pc */ -	{ 0, 0, -	    nosys },				/* 68 = unimplemented reserved for unix/pc */ -	{ 0, 0, -	    nosys },				/* 69 = unimplemented reserved for unix/pc */ -	{ 0, 0, -	    nosys },				/* 70 = obsolete rfs_advfs */ -	{ 0, 0, -	    nosys },				/* 71 = obsolete rfs_unadvfs */ -	{ 0, 0, -	    nosys },				/* 72 = obsolete rfs_rmount */ -	{ 0, 0, -	    nosys },				/* 73 = obsolete rfs_rumount */ -	{ 0, 0, -	    nosys },				/* 74 = obsolete rfs_rfstart */ -	{ 0, 0, -	    nosys },				/* 75 = obsolete rfs_sigret */ -	{ 0, 0, -	    nosys },				/* 76 = obsolete rfs_rdebug */ -	{ 0, 0, -	    nosys },				/* 77 = obsolete rfs_rfstop */ -	{ 0, 0, -	    nosys },				/* 78 = unimplemented rfs_rfsys */ -	{ 1, s(struct ibcs2_rmdir_args), -	    ibcs2_rmdir },			/* 79 = ibcs2_rmdir */ -	{ 2, s(struct ibcs2_mkdir_args), -	    ibcs2_mkdir },			/* 80 = ibcs2_mkdir */ -	{ 3, s(struct ibcs2_getdents_args), -	    ibcs2_getdents },			/* 81 = ibcs2_getdents */ -	{ 0, 0, -	    nosys },				/* 82 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 83 = unimplemented nosys */ -	{ 3, s(struct ibcs2_sysfs_args), -	    ibcs2_sysfs },			/* 84 = ibcs2_sysfs */ -	{ 4, s(struct ibcs2_getmsg_args), -	    ibcs2_getmsg },			/* 85 = ibcs2_getmsg */ -	{ 4, s(struct ibcs2_putmsg_args), -	    ibcs2_putmsg },			/* 86 = ibcs2_putmsg */ -	{ 3, s(struct ibcs2_poll_args), -	    ibcs2_poll },			/* 87 = ibcs2_poll */ -	{ 0, 0, -	    nosys },				/* 88 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 89 = unimplemented nosys */ -	{ 2, s(struct ibcs2_symlink_args), -	    ibcs2_symlink },			/* 90 = ibcs2_symlink */ -	{ 2, s(struct ibcs2_lstat_args), -	    ibcs2_lstat },			/* 91 = ibcs2_lstat */ -	{ 3, s(struct ibcs2_readlink_args), -	    ibcs2_readlink },			/* 92 = ibcs2_readlink */ -	{ 0, 0, -	    nosys },				/* 93 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 94 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 95 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 96 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 97 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 98 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 99 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 100 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 101 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 102 = unimplemented nosys */ -	{ 1, s(struct sigreturn_args), -	    sigreturn },			/* 103 = sigreturn */ -	{ 0, 0, -	    nosys },				/* 104 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 105 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 106 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 107 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 108 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 109 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 110 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 111 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 112 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 113 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 114 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 115 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 116 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 117 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 118 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 119 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 120 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 121 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 122 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 123 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 124 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 125 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 126 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 127 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 128 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 129 = unimplemented xenix_xlocking */ -	{ 0, 0, -	    nosys },				/* 130 = unimplemented xenix_creatsem */ -	{ 0, 0, -	    nosys },				/* 131 = unimplemented xenix_opensem */ -	{ 0, 0, -	    nosys },				/* 132 = unimplemented xenix_sigsem */ -	{ 0, 0, -	    nosys },				/* 133 = unimplemented xenix_waitsem */ -	{ 0, 0, -	    nosys },				/* 134 = unimplemented xenix_nbwaitsem */ -	{ 1, s(struct xenix_rdchk_args), -	    xenix_rdchk },			/* 135 = xenix_rdchk */ -	{ 0, 0, -	    nosys },				/* 136 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 137 = unimplemented nosys */ -	{ 2, s(struct xenix_chsize_args), -	    xenix_chsize },			/* 138 = xenix_chsize */ -	{ 1, s(struct xenix_ftime_args), -	    xenix_ftime },			/* 139 = xenix_ftime */ -	{ 1, s(struct xenix_nap_args), -	    xenix_nap },			/* 140 = xenix_nap */ -	{ 0, 0, -	    nosys },				/* 141 = unimplemented xenix_sdget */ -	{ 0, 0, -	    nosys },				/* 142 = unimplemented xenix_sdfree */ -	{ 0, 0, -	    nosys },				/* 143 = unimplemented xenix_sdenter */ -	{ 0, 0, -	    nosys },				/* 144 = unimplemented xenix_sdleave */ -	{ 0, 0, -	    nosys },				/* 145 = unimplemented xenix_sdgetv */ -	{ 0, 0, -	    nosys },				/* 146 = unimplemented xenix_sdwaitv */ -	{ 0, 0, -	    nosys },				/* 147 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 148 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 149 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 150 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 151 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 152 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 153 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 154 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 155 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 156 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 157 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 158 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 159 = unimplemented nosys */ -	{ 0, 0, -	    nosys },				/* 160 = unimplemented xenix_proctl */ -	{ 0, 0, -	    nosys },				/* 161 = unimplemented xenix_execseg */ -	{ 0, 0, -	    nosys },				/* 162 = unimplemented xenix_unexecseg */ -	{ 0, 0, -	    nosys },				/* 163 = unimplemented nosys */ -	{ 5, s(struct select_args), -	    select },				/* 164 = select */ -	{ 0, 0, -	    nosys },				/* 165 = unimplemented xenix_eaccess */ -	{ 0, 0, -	    nosys },				/* 166 = unimplemented xenix_paccess */ -	{ 3, s(struct ibcs2_sigaction_args), -	    ibcs2_sigaction },			/* 167 = ibcs2_sigaction */ -	{ 3, s(struct ibcs2_sigprocmask_args), -	    ibcs2_sigprocmask },		/* 168 = ibcs2_sigprocmask */ -	{ 1, s(struct ibcs2_sigpending_args), -	    ibcs2_sigpending },			/* 169 = ibcs2_sigpending */ -	{ 1, s(struct ibcs2_sigsuspend_args), -	    ibcs2_sigsuspend },			/* 170 = ibcs2_sigsuspend */ -	{ 2, s(struct ibcs2_getgroups_args), -	    ibcs2_getgroups },			/* 171 = ibcs2_getgroups */ -	{ 2, s(struct ibcs2_setgroups_args), -	    ibcs2_setgroups },			/* 172 = ibcs2_setgroups */ -	{ 1, s(struct ibcs2_sysconf_args), -	    ibcs2_sysconf },			/* 173 = ibcs2_sysconf */ -	{ 2, s(struct ibcs2_pathconf_args), -	    ibcs2_pathconf },			/* 174 = ibcs2_pathconf */ -	{ 2, s(struct ibcs2_fpathconf_args), -	    ibcs2_fpathconf },			/* 175 = ibcs2_fpathconf */ -	{ 2, s(struct ibcs2_rename_args), -	    ibcs2_rename },			/* 176 = ibcs2_rename */ -}; - diff --git a/sys/i386/ibcs2/ibcs2_termios.h b/sys/i386/ibcs2/ibcs2_termios.h deleted file mode 100644 index 35602cf999d97..0000000000000 --- a/sys/i386/ibcs2/ibcs2_termios.h +++ /dev/null @@ -1,235 +0,0 @@ -/*	$NetBSD: ibcs2_termios.h,v 1.3 1994/10/26 02:53:07 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_TERMIOS_H -#define	_IBCS2_TERMIOS_H	1 - -#include <compat/ibcs2/ibcs2_types.h> - -#define IBCS2_NCC	8 -#define IBCS2_NCCS	13 - -typedef u_short	ibcs2_tcflag_t; -typedef u_char	ibcs2_cc_t; -typedef u_long	ibcs2_speed_t; - -struct ibcs2_termio { -	u_short	c_iflag; -	u_short	c_oflag; -	u_short	c_cflag; -	u_short	c_lflag; -	char	c_line; -	u_char	c_cc[IBCS2_NCC]; -}; - -struct ibcs2_termios { -	ibcs2_tcflag_t	c_iflag; -	ibcs2_tcflag_t	c_oflag; -	ibcs2_tcflag_t	c_cflag; -	ibcs2_tcflag_t	c_lflag; -	char		c_line; -	ibcs2_cc_t	c_cc[IBCS2_NCCS]; -	char		c_ispeed; -	char		c_ospeed; -}; - -#define IBCS2_VINTR		0 -#define IBCS2_VQUIT		1 -#define IBCS2_VERASE		2 -#define IBCS2_VKILL		3 -#define IBCS2_VEOF		4 -#define IBCS2_VEOL		5 -#define IBCS2_VEOL2		6 -#define IBCS2_VMIN		4 -#define IBCS2_VTIME		5 -#define IBCS2_VSWTCH		7 -#define IBCS2_VSUSP		10 -#define IBCS2_VSTART		11 -#define IBCS2_VSTOP		12 - -#define IBCS2_CNUL		0 -#define IBCS2_CDEL		0377 -#define IBCS2_CESC		'\\' -#define IBCS2_CINTR		0177 -#define IBCS2_CQUIT		034 -#define IBCS2_CERASE		'#' -#define IBCS2_CKILL		'@' -#define IBCS2_CSTART		021 -#define IBCS2_CSTOP		023 -#define IBCS2_CSWTCH		032 -#define IBCS2_CNSWTCH		0 -#define IBCS2_CSUSP		032 - -#define IBCS2_IGNBRK		0000001 -#define IBCS2_BRKINT		0000002 -#define IBCS2_IGNPAR		0000004 -#define IBCS2_PARMRK		0000010 -#define IBCS2_INPCK		0000020 -#define IBCS2_ISTRIP		0000040 -#define IBCS2_INLCR		0000100 -#define IBCS2_IGNCR		0000200 -#define IBCS2_ICRNL		0000400 -#define IBCS2_IUCLC		0001000 -#define IBCS2_IXON		0002000 -#define IBCS2_IXANY		0004000 -#define IBCS2_IXOFF		0010000 -#define IBCS2_IMAXBEL		0020000 -#define IBCS2_DOSMODE		0100000 - -#define IBCS2_OPOST		0000001 -#define IBCS2_OLCUC		0000002 -#define IBCS2_ONLCR		0000004 -#define IBCS2_OCRNL		0000010 -#define IBCS2_ONOCR		0000020 -#define IBCS2_ONLRET		0000040 -#define IBCS2_OFILL		0000100 -#define IBCS2_OFDEL		0000200 -#define IBCS2_NLDLY		0000400 -#define IBCS2_NL0		0000000 -#define IBCS2_NL1		0000400 -#define IBCS2_CRDLY		0003000 -#define IBCS2_CR0		0000000 -#define IBCS2_CR1		0001000 -#define IBCS2_CR2		0002000 -#define IBCS2_CR3		0003000 -#define IBCS2_TABDLY		0014000 -#define IBCS2_TAB0		0000000 -#define IBCS2_TAB1		0004000 -#define IBCS2_TAB2		0010000 -#define IBCS2_TAB3		0014000 -#define IBCS2_BSDLY		0020000 -#define IBCS2_BS0		0000000 -#define IBCS2_BS1		0020000 -#define IBCS2_VTDLY		0040000 -#define IBCS2_VT0		0000000 -#define IBCS2_VT1		0040000 -#define IBCS2_FFDLY		0100000 -#define IBCS2_FF0		0000000 -#define IBCS2_FF1		0100000 - -#define IBCS2_CBAUD		0000017 -#define IBCS2_CSIZE		0000060 -#define IBCS2_CS5		0000000 -#define IBCS2_CS6		0000020 -#define IBCS2_CS7		0000040 -#define IBCS2_CS8		0000060 -#define IBCS2_CSTOPB		0000100 -#define IBCS2_CREAD		0000200 -#define IBCS2_PARENB		0000400 -#define IBCS2_PARODD		0001000 -#define IBCS2_HUPCL		0002000 -#define IBCS2_CLOCAL		0004000 -#define IBCS2_RCV1EN		0010000 -#define IBCS2_XMT1EN		0020000 -#define IBCS2_LOBLK		0040000 -#define IBCS2_XCLUDE		0100000 - -#define IBCS2_ISIG		0000001 -#define IBCS2_ICANON		0000002 -#define IBCS2_XCASE		0000004 -#define IBCS2_ECHO		0000010 -#define IBCS2_ECHOE		0000020 -#define IBCS2_ECHOK		0000040 -#define IBCS2_ECHONL		0000100 -#define IBCS2_NOFLSH		0000200 -#define IBCS2_IEXTEN		0000400 -#define IBCS2_TOSTOP		0001000 - -#define IBCS2_XIOC		(('i'<<24)|('X'<<16)) -#define IBCS2_XCGETA  		(IBCS2_XIOC|1) -#define IBCS2_XCSETA  		(IBCS2_XIOC|2) -#define IBCS2_XCSETAW 		(IBCS2_XIOC|3) -#define IBCS2_XCSETAF 		(IBCS2_XIOC|4) - -#define IBCS2_OXIOC		('x'<<8) -#define IBCS2_OXCGETA  		(IBCS2_OXIOC|1) -#define IBCS2_OXCSETA  		(IBCS2_OXIOC|2) -#define IBCS2_OXCSETAW 		(IBCS2_OXIOC|3) -#define IBCS2_OXCSETAF 		(IBCS2_OXIOC|4) - -#define IBCS2_TIOC		('T'<<8) -#define IBCS2_TCGETA  		(IBCS2_TIOC|1) -#define IBCS2_TCSETA  		(IBCS2_TIOC|2) -#define IBCS2_TCSETAW 		(IBCS2_TIOC|3) -#define IBCS2_TCSETAF 		(IBCS2_TIOC|4) -#define IBCS2_TCSBRK  		(IBCS2_TIOC|5) -#define IBCS2_TCXONC  		(IBCS2_TIOC|6) -#define IBCS2_TCFLSH  		(IBCS2_TIOC|7) - -#define IBCS2_TCGETSC		(IBCS2_TIOC|34) -#define IBCS2_TCSETSC		(IBCS2_TIOC|35) - -#define IBCS2_TIOCSWINSZ	(IBCS2_TIOC|103) -#define IBCS2_TIOCGWINSZ	(IBCS2_TIOC|104) -#define IBCS2_TIOCSPGRP		(IBCS2_TIOC|118) -#define IBCS2_TIOCGPGRP		(IBCS2_TIOC|119) - -#define IBCS2_TCSANOW		IBCS2_XCSETA -#define IBCS2_TCSADRAIN		IBCS2_XCSETAW -#define IBCS2_TCSAFLUSH		IBCS2_XCSETAF -#define IBCS2_TCSADFLUSH	IBCS2_XCSETAF - -#define IBCS2_TCIFLUSH		0 -#define IBCS2_TCOFLUSH		1 -#define IBCS2_TCIOFLUSH		2 - -#define IBCS2_TCOOFF		0 -#define IBCS2_TCOON		1 -#define IBCS2_TCIOFF		2 -#define IBCS2_TCION		3 - -#define IBCS2_B0		0 -#define IBCS2_B50		1 -#define IBCS2_B75		2 -#define IBCS2_B110		3 -#define IBCS2_B134		4 -#define IBCS2_B150		5 -#define IBCS2_B200		6 -#define IBCS2_B300		7 -#define IBCS2_B600		8 -#define IBCS2_B1200		9 -#define IBCS2_B1800		10 -#define IBCS2_B2400		11 -#define IBCS2_B4800		12 -#define IBCS2_B9600		13 -#define IBCS2_B19200		14 -#define IBCS2_B38400		15 - -struct ibcs2_winsize { -        u_short ws_row; -        u_short ws_col; -        u_short ws_xpixel; -        u_short ws_ypixel; -}; - -#endif /* _IBCS2_H_ */ - diff --git a/sys/i386/ibcs2/ibcs2_time.h b/sys/i386/ibcs2/ibcs2_time.h deleted file mode 100644 index a3b669b6ae3fd..0000000000000 --- a/sys/i386/ibcs2/ibcs2_time.h +++ /dev/null @@ -1,50 +0,0 @@ -/*	$NetBSD: ibcs2_time.h,v 1.2 1994/10/26 02:53:08 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_TIME_H -#define	_IBCS2_TIME_H - -#include <compat/ibcs2/ibcs2_types.h> - -struct ibcs2_tm { -	int	tm_sec; -	int	tm_min; -	int	tm_hour; -	int	tm_mday; -	int	tm_mon; -	int	tm_year; -	int	tm_wday; -	int	tm_yday; -	int	tm_isdst; -}; - -#endif /* _IBCS2_TIME_H */ diff --git a/sys/i386/ibcs2/ibcs2_types.h b/sys/i386/ibcs2/ibcs2_types.h deleted file mode 100644 index 305a1fc6f440e..0000000000000 --- a/sys/i386/ibcs2/ibcs2_types.h +++ /dev/null @@ -1,54 +0,0 @@ -/*	$NetBSD: ibcs2_types.h,v 1.5 1995/08/14 01:11:54 mycroft Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_TYPES_H -#define	_IBCS2_TYPES_H - -typedef unsigned char	ibcs2_uchar_t; -typedef unsigned long	ibcs2_ulong_t; - -typedef char *		ibcs2_caddr_t; -typedef long		ibcs2_daddr_t; -typedef long		ibcs2_off_t; -typedef long		ibcs2_key_t; -typedef unsigned short	ibcs2_uid_t; -typedef unsigned short	ibcs2_gid_t; -typedef short		ibcs2_nlink_t; -typedef short		ibcs2_dev_t; -typedef unsigned short	ibcs2_ino_t; -typedef unsigned int	ibcs2_size_t; -typedef long		ibcs2_time_t; -typedef long		ibcs2_clock_t; -typedef unsigned short	ibcs2_mode_t; -typedef short		ibcs2_pid_t; - -#endif /* _IBCS2_TYPES_H */ diff --git a/sys/i386/ibcs2/ibcs2_unistd.h b/sys/i386/ibcs2/ibcs2_unistd.h deleted file mode 100644 index 1a0dd6694128b..0000000000000 --- a/sys/i386/ibcs2/ibcs2_unistd.h +++ /dev/null @@ -1,75 +0,0 @@ -/*	$NetBSD: ibcs2_unistd.h,v 1.2 1994/10/26 02:53:11 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_UNISTD_H -#define	_IBCS2_UNISTD_H - -#define IBCS2_R_OK		4 -#define IBCS2_W_OK		2 -#define IBCS2_X_OK		1 -#define IBCS2_F_OK		0 - -#define IBCS2_F_ULOCK		0 -#define IBCS2_F_LOCK		1 -#define IBCS2_F_TLOCK		2 -#define IBCS2_F_TEST		3 - -#define IBCS2_SEEK_SET		0 -#define IBCS2_SEEK_CUR		1 -#define IBCS2_SEEK_END		2 - -#define IBCS2_SC_ARG_MAX		0 -#define IBCS2_SC_CHILD_MAX		1 -#define IBCS2_SC_CLK_TCK		2 -#define IBCS2_SC_NGROUPS_MAX		3 -#define IBCS2_SC_OPEN_MAX		4 -#define IBCS2_SC_JOB_CONTROL		5 -#define IBCS2_SC_SAVED_IDS		6 -#define IBCS2_SC_VERSION		7 -#define IBCS2_SC_PASS_MAX		8 -#define IBCS2_SC_XOPEN_VERSION		9 - -#define IBCS2_PC_LINK_MAX		0 -#define IBCS2_PC_MAX_CANON		1 -#define IBCS2_PC_MAX_INPUT		2 -#define IBCS2_PC_NAME_MAX		3 -#define IBCS2_PC_PATH_MAX		4 -#define IBCS2_PC_PIPE_BUF		5 -#define IBCS2_PC_CHOWN_RESTRICTED	6 -#define IBCS2_PC_NO_TRUNC		7 -#define IBCS2_PC_VDISABLE		8 - -#define IBCS2_STDIN_FILENO		0 -#define IBCS2_STDOUT_FILENO		1 -#define IBCS2_STDERR_FILENO		2 - -#endif /* _IBCS2_UNISTD_H */ diff --git a/sys/i386/ibcs2/ibcs2_ustat.h b/sys/i386/ibcs2/ibcs2_ustat.h deleted file mode 100644 index 03c7146359188..0000000000000 --- a/sys/i386/ibcs2/ibcs2_ustat.h +++ /dev/null @@ -1,46 +0,0 @@ -/*	$NetBSD: ibcs2_ustat.h,v 1.2 1994/10/26 02:53:13 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _IBCS2_USTAT_H -#define _IBCS2_USTAT_H 1 - -#include <compat/ibcs2/ibcs2_types.h> - -struct ibcs2_ustat { -	long		f_tfree; -	ibcs2_ino_t	f_tinode; -	char		f_fname[6]; -	char		f_fpack[6]; -}; -#define ibcs2_ustat_len	(sizeof(struct ibcs2_ustat)) - -#endif /* _IBCS2_USTAT_H */ diff --git a/sys/i386/ibcs2/ibcs2_util.c b/sys/i386/ibcs2/ibcs2_util.c deleted file mode 100644 index 69937acda2941..0000000000000 --- a/sys/i386/ibcs2/ibcs2_util.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (c) 1994 Christos Zoulas - * Copyright (c) 1995 Frank van der Linden - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - *	from: svr4_util.c,v 1.5 1995/01/22 23:44:50 christos Exp - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/namei.h> -#include <sys/proc.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/filedesc.h> -#include <sys/ioctl.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/vnode.h> - -#include <compat/ibcs2/ibcs2_util.h> - -const char      ibcs2_emul_path[] = "/emul/ibcs2"; - -/* - * Search an alternate path before passing pathname arguments on - * to system calls. Useful for keeping a seperate 'emulation tree'. - * - * If cflag is set, we check if an attempt can be made to create - * the named file, i.e. we check if the directory it should - * be in exists. - */ -int -ibcs2_emul_find(p, sgp, prefix, path, pbuf, cflag) -	struct proc	 *p; -	caddr_t		 *sgp;		/* Pointer to stackgap memory */ -	const char	 *prefix; -	char		 *path; -	char		**pbuf; -	int		  cflag; -{ -	struct nameidata	 nd; -	struct nameidata	 ndroot; -	struct vattr		 vat; -	struct vattr		 vatroot; -	int			 error; -	char			*ptr, *buf, *cp; -	size_t			 sz, len; - -	buf = (char *) malloc(MAXPATHLEN, M_TEMP, M_WAITOK); -	*pbuf = path; - -	for (ptr = buf; (*ptr = *prefix) != '\0'; ptr++, prefix++) -		continue; - -	sz = MAXPATHLEN - (ptr - buf); - -	/*  -	 * If sgp is not given then the path is already in kernel space -	 */ -	if (sgp == NULL) -		error = copystr(path, ptr, sz, &len); -	else -		error = copyinstr(path, ptr, sz, &len); - -	if (error) { -		free(buf, M_TEMP); -		return error; -	} - -	if (*ptr != '/') { -		free(buf, M_TEMP); -		return EINVAL; -	} - -	/* -	 * We know that there is a / somewhere in this pathname. -	 * Search backwards for it, to find the file's parent dir -	 * to see if it exists in the alternate tree. If it does, -	 * and we want to create a file (cflag is set). We don't -	 * need to worry about the root comparison in this case. -	 */ - -	if (cflag) { -		for (cp = &ptr[len] - 1; *cp != '/'; cp--); -		*cp = '\0'; - -		NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, buf, p); - -		if ((error = namei(&nd)) != 0) { -			free(buf, M_TEMP); -			return error; -		} - -		*cp = '/'; -	} -	else { -		NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, buf, p); - -		if ((error = namei(&nd)) != 0) { -			free(buf, M_TEMP); -			return error; -		} - -		/* -		 * We now compare the vnode of the ibcs2_root to the one -		 * vnode asked. If they resolve to be the same, then we -		 * ignore the match so that the real root gets used. -		 * This avoids the problem of traversing "../.." to find the -		 * root directory and never finding it, because "/" resolves -		 * to the emulation root directory. This is expensive :-( -		 */ -		/* XXX: prototype should have const here for NDINIT */ -		NDINIT(&ndroot, LOOKUP, FOLLOW, UIO_SYSSPACE,  -		       (char *) ibcs2_emul_path, p); - -		if ((error = namei(&ndroot)) != 0) { -			/* Cannot happen! */ -			free(buf, M_TEMP); -			vrele(nd.ni_vp); -			return error; -		} - -		if ((error = VOP_GETATTR(nd.ni_vp, &vat, p->p_ucred, p)) != 0) { -			goto done; -		} - -		if ((error = VOP_GETATTR(ndroot.ni_vp, &vatroot, p->p_ucred, p)) -		    != 0) { -			goto done; -		} - -		if (vat.va_fsid == vatroot.va_fsid && -		    vat.va_fileid == vatroot.va_fileid) { -			error = ENOENT; -			goto done; -		} - -	} -	if (sgp == NULL) -		*pbuf = buf; -	else { -		sz = &ptr[len] - buf; -		*pbuf = stackgap_alloc(sgp, sz + 1); -		error = copyout(buf, *pbuf, sz); -		free(buf, M_TEMP); -	} - - -done: -	vrele(nd.ni_vp); -	if (!cflag) -		vrele(ndroot.ni_vp); -	return error; -} diff --git a/sys/i386/ibcs2/ibcs2_util.h b/sys/i386/ibcs2/ibcs2_util.h deleted file mode 100644 index 6aa4e8c9a5031..0000000000000 --- a/sys/i386/ibcs2/ibcs2_util.h +++ /dev/null @@ -1,82 +0,0 @@ - -/* - * Copyright (c) 1994 Christos Zoulas - * Copyright (c) 1995 Frank van der Linden - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * from: svr4_util.h,v 1.5 1994/11/18 02:54:31 christos Exp - * from: linux_util.h,v 1.2 1995/03/05 23:23:50 fvdl Exp - */ - -/* - * This file is pretty much the same as Christos' svr4_util.h - * (for now). - */ - -#ifndef	_IBCS2_UTIL_H_ -#define	_IBCS2_UTIL_H_ - -#include <machine/vmparam.h> -#include <sys/exec.h> -#include <sys/cdefs.h> - -static __inline caddr_t -stackgap_init() -{ -	extern char     sigcode[], esigcode[]; -#define szsigcode ((caddr_t)(esigcode - sigcode)) -	return STACKGAPBASE; -} - - -static __inline void * -stackgap_alloc(sgp, sz) -	caddr_t	*sgp; -	size_t   sz; -{ -	void	*p = (void *) *sgp; -	*sgp += ALIGN(sz); -	return p; -} - -#ifdef DEBUG_IBCS2 -#define DPRINTF(a)      printf a; -#else -#define DPRINTF(a) -#endif - -extern const char ibcs2_emul_path[]; - -int ibcs2_emul_find __P((struct proc *, caddr_t *, const char *, char *, -			char **, int)); - -#define CHECKALTEXIST(p, sgp, path) \ -    ibcs2_emul_find(p, sgp, ibcs2_emul_path, path, &(path), 0) - -#define CHECKALTCREAT(p, sgp, path) \ -    ibcs2_emul_find(p, sgp, ibcs2_emul_path, path, &(path), 1) - -#endif /* !_IBCS2_UTIL_H_ */ diff --git a/sys/i386/ibcs2/ibcs2_utime.h b/sys/i386/ibcs2/ibcs2_utime.h deleted file mode 100644 index 02d83150a27a1..0000000000000 --- a/sys/i386/ibcs2/ibcs2_utime.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 1995 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_UTIME_H -#define	_IBCS2_UTIME_H - -#include <compat/ibcs2/ibcs2_types.h> - -struct ibcs2_utimbuf { -        ibcs2_time_t actime; -	ibcs2_time_t modtime; -}; - -#endif /* _IBCS2_UTIME_H */ diff --git a/sys/i386/ibcs2/ibcs2_utsname.h b/sys/i386/ibcs2/ibcs2_utsname.h deleted file mode 100644 index 4f2ee68f7a9bc..0000000000000 --- a/sys/i386/ibcs2/ibcs2_utsname.h +++ /dev/null @@ -1,45 +0,0 @@ -/*	$NetBSD: ibcs2_utsname.h,v 1.2 1994/10/26 02:53:14 cgd Exp $	*/ - -/* - * Copyright (c) 1994 Scott Bartram - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Scott Bartram. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef	_IBCS2_UTSNAME_H -#define	_IBCS2_UTSNAME_H - -struct ibcs2_utsname { -	char	sysname[9]; -	char	nodename[9]; -	char	release[9]; -	char	version[9]; -	char	machine[9]; -}; -#define ibcs2_utsname_len	(sizeof(struct ibcs2_utsname)) - -#endif /* _IBCS2_UTSNAME_H */ diff --git a/sys/i386/ibcs2/syscalls.conf b/sys/i386/ibcs2/syscalls.conf deleted file mode 100644 index 7f46f44334072..0000000000000 --- a/sys/i386/ibcs2/syscalls.conf +++ /dev/null @@ -1,12 +0,0 @@ -#	syscalls.conf - -sysnames="ibcs2_syscalls.c" -sysnumhdr="ibcs2_syscall.h" -syssw="ibcs2_sysent.c" -sysarghdr="ibcs2_syscallargs.h" -compatopts="compat_43 compat_09 compat_10" -libcompatopts="" - -switchname="ibcs2_sysent" -namesname="ibcs2_syscallnames" -constprefix="IBCS2_SYS_" diff --git a/sys/i386/ibcs2/syscalls.master b/sys/i386/ibcs2/syscalls.master deleted file mode 100644 index db907d72e555d..0000000000000 --- a/sys/i386/ibcs2/syscalls.master +++ /dev/null @@ -1,243 +0,0 @@ -	$NetBSD: syscalls.master,v 1.4 1995/03/14 15:12:52 scottb Exp $ - -;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93 -; System call name/number master file (or rather, slave, from IBCS2). -; Processed to created ibcs2_sysent.c, ibcs2_syscalls.c and ibcs2_syscall.h. - -; Columns: number type nargs name altname/comments -;	number	system call number, must be in order -;	type	one of STD, OBSOL, UNIMPL, STD -;	nargs	number of arguments -;	name	name of syscall routine -;	altname	name of system call if different -;		for UNIMPL/OBSOL, name continues with comments - -#include <sys/param.h> -#include <compat/ibcs2/ibcs2_types.h> -#include <compat/ibcs2/ibcs2_signal.h> -#include <compat/ibcs2/ibcs2_statfs.h> -#include <sys/systm.h> -#include <sys/signal.h> -#include <sys/mount.h> -#include <sys/syscallargs.h> -#include <compat/ibcs2/ibcs2_syscallargs.h> - -; types: -;	STD	always included -;	STD	included on COMPAT #ifdef -;	LIBSTD included on COMPAT #ifdef, and placed in syscall.h -;	OBSOL	obsolete, not included in system, only specifies name -;	UNIMPL	not implemented, placeholder only - -; #ifdef's, etc. may be included, and are copied to the output files. - -0	NOARGS		{ int nosys(void); } syscall -1	NOARGS		{ int exit(int rval); } -2	NOARGS		{ int fork(void); } -3	STD		{ int ibcs2_read(int fd, char *buf, u_int nbytes); } -4	NOARGS		{ int write(int fd, char *buf, u_int nbytes); } -5	STD		{ int ibcs2_open(char *path, int flags, int mode); } -6	NOARGS		{ int close(int fd); } -7	STD		{ int ibcs2_waitsys(int a1, int a2, int a3); } -8	STD		{ int ibcs2_creat(char *path, int mode); } -9	NOARGS		{ int link(char *path, char *link); } -10	STD		{ int ibcs2_unlink(char *path); } -11	STD		{ int ibcs2_execv(char *path, char **argp); } -12	STD		{ int ibcs2_chdir(char *path); } -13	STD		{ int ibcs2_time(ibcs2_time_t *tp); } -14	STD		{ int ibcs2_mknod(char* path, int mode, int dev); } -15	STD		{ int ibcs2_chmod(char *path, int mode); } -16	STD		{ int ibcs2_chown(char *path, int uid, int gid); } -17	NOARGS		{ int obreak(caddr_t nsize); } -18	STD		{ int ibcs2_stat(char* path, struct ibcs2_stat *st); } -19	NOARGS		{ long compat_43_lseek(int fd, long offset, \ -					       int whence); } -20	NOARGS		{ pid_t getpid(void); } -21	STD		{ int ibcs2_mount(char *special, char *dir, int flags, \ -				      int fstype, char *data, int len); } -22	STD		{ int ibcs2_umount(char *name); } -23	STD		{ int ibcs2_setuid(int uid); } -24	NOARGS		{ uid_t getuid(void); } -25	STD		{ int ibcs2_stime(long *timep); } -26	UNIMPL		ibcs2_ptrace -27	STD		{ int ibcs2_alarm(unsigned sec); } -28	STD		{ int ibcs2_fstat(int fd, struct ibcs2_stat *st); } -29	STD		{ int ibcs2_pause(void); } -30	STD		{ int ibcs2_utime(char *path, \ -					  struct ibcs2_utimbuf *buf); } -31	UNIMPL		was stty -32	UNIMPL		was gtty -33	STD		{ int ibcs2_access(char *path, int flags); } -34	STD		{ int ibcs2_nice(int incr); } -35	STD		{ int ibcs2_statfs(char *path, \ -					   struct ibcs2_statfs *buf, \ -					   int len, int fstype); } -36	NOARGS		{ int sync(void); } -37	STD		{ int ibcs2_kill(int pid, int signo); } -38	STD		{ int ibcs2_fstatfs(int fd, struct ibcs2_statfs *buf, \ -					    int len, int fstype); } -39	STD		{ int ibcs2_pgrpsys(int type, caddr_t dummy, int pid, \ -					    int pgid); } -40	UNIMPL		ibcs2_xenix -41	NOARGS		{ int dup(u_int fd); } -42	NOARGS		{ int pipe(void); } -43	STD		{ int ibcs2_times(struct tms *tp); } -44	UNIMPL		profil -45	STD		{ int ibcs2_plock(int cmd); } -46	STD		{ int ibcs2_setgid(int gid); } -47	NOARGS		{ gid_t getgid(void); } -48	STD		{ int ibcs2_sigsys(int sig, ibcs2_sig_t fp); } -#ifdef SYSVMSG -49	STD		{ int ibcs2_msgsys(int which, int a2, int a3, int a4, \ -				     int a5, int a6); } -#else -49	UNIMPL		nosys -#endif -50	UNIMPL		ibcs2_sys3b -51	UNIMPL		ibcs2_acct -#ifdef SYSVSHM -52	STD		{ int ibcs2_shmsys(int which, int a2, int a3, int a4); } -#else -52	UNIMPL		nosys -#endif -#ifdef SYSVSEM -53	STD		{ int ibcs2_semsys(int which, int a2, int a3, int a4, \ -				     int a5); } -#else -53	UNIMPL		nosys -#endif -54	STD		{ int ibcs2_ioctl(int fd, int cmd, caddr_t data); } -55	STD		{ int ibcs2_uadmin(int cmd, int func, caddr_t data); } -56	UNIMPL		nosys -57	STD		{ int ibcs2_utssys(int a1, int a2, int flag); } -58	UNIMPL		nosys -59	STD		{ int ibcs2_execve(char *path, char **argp, \ -					   char **envp); } -60	NOARGS		{ int umask(int newmask); } -61	NOARGS		{ int chroot(char *path); } -62	STD		{ int ibcs2_fcntl(int fd, int cmd, char *arg); } -63	STD		{ long ibcs2_ulimit(int cmd, int newlimit); } -64	UNIMPL		reserved for unix/pc -65	UNIMPL		reserved for unix/pc -66	UNIMPL		reserved for unix/pc -67	UNIMPL		reserved for unix/pc -68	UNIMPL		reserved for unix/pc -69	UNIMPL		reserved for unix/pc -70	OBSOL		rfs_advfs -71	OBSOL		rfs_unadvfs -72	OBSOL		rfs_rmount -73	OBSOL		rfs_rumount -74	OBSOL		rfs_rfstart -75	OBSOL		rfs_sigret -76	OBSOL		rfs_rdebug -77	OBSOL		rfs_rfstop -78	UNIMPL		rfs_rfsys -79	STD		{ int ibcs2_rmdir(char *path); } -80	STD		{ int ibcs2_mkdir(char *path, int mode); } -81	STD		{ int ibcs2_getdents(int fd, char *buf, int nbytes); } -82	UNIMPL		nosys -83	UNIMPL		nosys -84	STD		{ int ibcs2_sysfs(int cmd, caddr_t d1, char *buf); } -85	STD		{ int ibcs2_getmsg(int fd, struct ibcs2_stropts *ctl, \ -					  struct ibcs2_stropts *dat, \ -					  int *flags); } -86	STD		{ int ibcs2_putmsg(int fd, struct ibcs2_stropts *ctl, \ -					  struct ibcs2_stropts *dat, \ -					  int flags); } -87	STD		{ int ibcs2_poll(struct ibcs2_pollfd *fds, long nfds, \ -					int timeout); } -88	UNIMPL		nosys -89	UNIMPL		nosys -90	STD		{ int ibcs2_symlink(char *path, char *link); } -91	STD		{ int ibcs2_lstat(char *path, struct ibcs2_stat *st); } -92	STD		{ int ibcs2_readlink(char *path, char *buf, int count); } -93	UNIMPL		nosys -94	UNIMPL		nosys -95	UNIMPL		nosys -96	UNIMPL		nosys -97	UNIMPL		nosys -98	UNIMPL		nosys -99	UNIMPL		nosys -100	UNIMPL		nosys -101	UNIMPL		nosys -102	UNIMPL		nosys -103	NOARGS		{ int sigreturn(struct sigcontext *sigcntxp); } -104	UNIMPL		nosys -105	UNIMPL		nosys -106	UNIMPL		nosys -107	UNIMPL		nosys -108	UNIMPL		nosys -109	UNIMPL		nosys -110	UNIMPL		nosys -111	UNIMPL		nosys -112	UNIMPL		nosys -113	UNIMPL		nosys -114	UNIMPL		nosys -115	UNIMPL		nosys -116	UNIMPL		nosys -117	UNIMPL		nosys -118	UNIMPL		nosys -119	UNIMPL		nosys -120	UNIMPL		nosys -121	UNIMPL		nosys -122	UNIMPL		nosys -123	UNIMPL		nosys -124	UNIMPL		nosys -125	UNIMPL		nosys -126	UNIMPL		nosys -127	UNIMPL		nosys -128	UNIMPL		nosys -129	UNIMPL		xenix_xlocking -130	UNIMPL		xenix_creatsem -131	UNIMPL		xenix_opensem -132	UNIMPL		xenix_sigsem -133	UNIMPL		xenix_waitsem -134	UNIMPL		xenix_nbwaitsem -135	STD		{ int xenix_rdchk(int fd); } -136	UNIMPL		nosys -137	UNIMPL		nosys -138	STD		{ int xenix_chsize(int fd, long size); } -139	STD		{ int xenix_ftime(struct xenix_timeb *tp); } -140	STD		{ int xenix_nap(int millisec); } -141	UNIMPL		xenix_sdget -142	UNIMPL		xenix_sdfree -143	UNIMPL		xenix_sdenter -144	UNIMPL		xenix_sdleave -145	UNIMPL		xenix_sdgetv -146	UNIMPL		xenix_sdwaitv -147	UNIMPL		nosys -148	UNIMPL		nosys -149	UNIMPL		nosys -150	UNIMPL		nosys -151	UNIMPL		nosys -152	UNIMPL		nosys -153	UNIMPL		nosys -154	UNIMPL		nosys -155	UNIMPL		nosys -156	UNIMPL		nosys -157	UNIMPL		nosys -158	UNIMPL		nosys -159	UNIMPL		nosys -160	UNIMPL		xenix_proctl -161	UNIMPL		xenix_execseg -162	UNIMPL		xenix_unexecseg -163	UNIMPL		nosys -164	NOARGS		{ int select(u_int nd, fd_set *in, fd_set *ou, \ -				     fd_set *ex, struct timeval *tv); } -165	UNIMPL		xenix_eaccess -166	UNIMPL		xenix_paccess -167	STD		{ int ibcs2_sigaction(int sig, \ -					      struct ibcs2_sigaction *act, \ -					      struct ibcs2_sigaction *oact); } -168	STD		{ int ibcs2_sigprocmask(int how, ibcs2_sigset_t *set, \ -					        ibcs2_sigset_t *oset); } -169	STD		{ int ibcs2_sigpending(ibcs2_sigset_t *mask); } -170	STD		{ int ibcs2_sigsuspend(ibcs2_sigset_t *mask); } -171	STD		{ int ibcs2_getgroups(int gidsetsize, \ -					      ibcs2_gid_t *gidset); } -172	STD		{ int ibcs2_setgroups(int gidsetsize, \ -					      ibcs2_gid_t *gidset); } -173	STD		{ int ibcs2_sysconf(int name); } -174	STD		{ int ibcs2_pathconf(char *path, int name); } -175	STD		{ int ibcs2_fpathconf(int fd, int name); } -176	STD		{ int ibcs2_rename(char *from, char *to); } diff --git a/sys/sys/ccdvar.h b/sys/sys/ccdvar.h deleted file mode 100644 index 00d2f2c817687..0000000000000 --- a/sys/sys/ccdvar.h +++ /dev/null @@ -1,206 +0,0 @@ -/*	$NetBSD: ccdvar.h,v 1.7.2.1 1995/10/12 21:30:18 thorpej Exp $	*/ - -/* - * Copyright (c) 1995 Jason R. Thorpe. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed for the NetBSD Project - *	by Jason R. Thorpe. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Copyright (c) 1988 University of Utah. - * Copyright (c) 1990, 1993 - *	The Regents of the University of California.  All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * the Systems Programming Group of the University of Utah Computer - * Science Department. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed by the University of - *	California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - *    may be used to endorse or promote products derived from this software - *    without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: Utah $Hdr: cdvar.h 1.1 90/07/09$ - * - *	@(#)cdvar.h	8.1 (Berkeley) 6/10/93 - */ - -/* - * Dynamic configuration and disklabel support by: - *	Jason R. Thorpe <thorpej@nas.nasa.gov> - *	Numerical Aerodynamic Simulation Facility - *	Mail Stop 258-6 - *	NASA Ames Research Center - *	Moffett Field, CA 94035 - */ - -/* - * A concatenated disk is described at initialization time by this structure. - */ -struct ccddevice { -	int		ccd_unit;	/* logical unit of this ccd */ -	int		ccd_interleave;	/* interleave (DEV_BSIZE blocks) */ -	int		ccd_flags;	/* misc. information */ -	int		ccd_dk;		/* disk number */ -	struct vnode	**ccd_vpp;	/* array of component vnodes */ -	char		**ccd_cpp;	/* array of component pathnames */ -	int		ccd_ndev;	/* number of component devices */ -}; - -/* - * This structure is used to configure a ccd via ioctl(2). - */ -struct ccd_ioctl { -	char	**ccio_disks;		/* pointer to component paths */ -	int	ccio_ndisks;		/* number of disks to concatenate */ -	int	ccio_ileave;		/* interleave (DEV_BSIZE blocks) */ -	int	ccio_flags;		/* misc. information */ -	int	ccio_unit;		/* unit number: use varies */ -	size_t	ccio_size;		/* (returned) size of ccd */ -}; - -/* ccd_flags */ -#define	CCDF_SWAP	0x01	/* interleave should be dmmax */ -#define CCDF_UNIFORM	0x02	/* use LCCD of sizes for uniform interleave */ - -/* Mask of user-settable ccd flags. */ -#define CCDF_USERMASK	(CCDF_SWAP|CCDF_UNIFORM) - -/* - * Component info table. - * Describes a single component of a concatenated disk. - */ -struct ccdcinfo { -	struct vnode	*ci_vp;			/* device's vnode */ -	dev_t		ci_dev;			/* XXX: device's dev_t */ -	size_t		ci_size; 		/* size */ -	char		*ci_path;		/* path to component */ -	size_t		ci_pathlen;		/* length of component path */ -}; - -/* - * Interleave description table. - * Computed at boot time to speed irregular-interleave lookups. - * The idea is that we interleave in "groups".  First we interleave - * evenly over all component disks up to the size of the smallest - * component (the first group), then we interleave evenly over all - * remaining disks up to the size of the next-smallest (second group), - * and so on. - * - * Each table entry describes the interleave characteristics of one - * of these groups.  For example if a concatenated disk consisted of - * three components of 5, 3, and 7 DEV_BSIZE blocks interleaved at - * DEV_BSIZE (1), the table would have three entries: - * - *	ndisk	startblk	startoff	dev - *	3	0		0		0, 1, 2 - *	2	9		3		0, 2 - *	1	13		5		2 - *	0	-		-		- - * - * which says that the first nine blocks (0-8) are interleaved over - * 3 disks (0, 1, 2) starting at block offset 0 on any component disk, - * the next 4 blocks (9-12) are interleaved over 2 disks (0, 2) starting - * at component block 3, and the remaining blocks (13-14) are on disk - * 2 starting at offset 5. - */ -struct ccdiinfo { -	int	ii_ndisk;	/* # of disks range is interleaved over */ -	daddr_t	ii_startblk;	/* starting scaled block # for range */ -	daddr_t	ii_startoff;	/* starting component offset (block #) */ -	int	*ii_index;	/* ordered list of components in range */ -}; - -/* - * Concatenated disk pseudo-geometry information. - */ -struct ccdgeom { -	u_int32_t	ccg_secsize;	/* # bytes per sector */ -	u_int32_t	ccg_nsectors;	/* # data sectors per track */ -	u_int32_t	ccg_ntracks;	/* # tracks per cylinder */ -	u_int32_t	ccg_ncylinders;	/* # cylinders per unit */ -}; - -/* - * A concatenated disk is described after initialization by this structure. - */ -struct ccd_softc { -	int		 sc_unit;		/* logical unit number */ -	int		 sc_flags;		/* flags */ -	int		 sc_cflags;		/* configuration flags */ -	size_t		 sc_size;		/* size of ccd */ -	int		 sc_ileave;		/* interleave */ -	int		 sc_nccdisks;		/* number of components */ -	struct ccdcinfo	 *sc_cinfo;		/* component info */ -	struct ccdiinfo	 *sc_itable;		/* interleave table */ -	int		 sc_nactive;		/* number of requests active */ -	int		 sc_dk;			/* disk index */ -	struct ccdgeom   sc_geom;		/* pseudo geometry info */ -	struct dkdevice	 sc_dkdev;		/* generic disk device info */ -}; - -/* sc_flags */ -#define CCDF_INITED	0x01	/* unit has been initialized */ -#define CCDF_WLABEL	0x02	/* label area is writable */ -#define CCDF_LABELLING	0x04	/* unit is currently being labelled */ -#define CCDF_WANTED	0x40	/* someone is waiting to obtain a lock */ -#define CCDF_LOCKED	0x80	/* unit is locked */ - -/* - * Before you can use a unit, it must be configured with CCDIOCSET. - * The configuration persists across opens and closes of the device; - * a CCDIOCCLR must be used to reset a configuration.  An attempt to - * CCDIOCSET an already active unit will return EBUSY.  Attempts to - * CCDIOCCLR an inactive unit will return ENXIO. - */ -#define CCDIOCSET	_IOWR('F', 16, struct ccd_ioctl)   /* enable ccd */ -#define CCDIOCCLR	_IOW('F', 17, struct ccd_ioctl)    /* disable ccd */ diff --git a/usr.sbin/bootpd/Makefile b/usr.sbin/bootpd/Makefile deleted file mode 100644 index fe2d435103068..0000000000000 --- a/usr.sbin/bootpd/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# bootpd/Makefile -# $Id: Makefile,v 1.1.1.1 1994/06/27 21:25:49 gwr Exp $ - -PROG=	bootpd -CFLAGS+= -DETC_ETHERS -DSYSLOG -DDEBUG -DVEND_CMU - -SRCS=	bootpd.c dovend.c readfile.c hash.c dumptab.c \ -	 lookup.c getif.c hwaddr.c report.c tzone.c - -MAN5=	bootptab.0 -MAN8=	bootpd.0 -MLINKS= bootpd.8 bootpgw.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/bootpd/getether.c b/usr.sbin/bootpd/getether.c deleted file mode 100644 index d131b50f7f896..0000000000000 --- a/usr.sbin/bootpd/getether.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - * getether.c : get the ethernet address of an interface - * - * All of this code is quite system-specific.  As you may well - * guess, it took a good bit of detective work to figure out! - * - * If you figure out how to do this on another system, - * please let me know.  <gwr@mc.com> - */ - -#include <sys/types.h> -#include <sys/socket.h> - -#include <ctype.h> -#include <syslog.h> - -#include "report.h" -#define EALEN 6 - -#if defined(ultrix) || (defined(__osf__) && defined(__alpha)) -/* - * This is really easy on Ultrix!  Thanks to - * Harald Lundberg <hl@tekla.fi> for this code. - * - * The code here is not specific to the Alpha, but that was the - * only symbol we could find to identify DEC's version of OSF. - * (Perhaps we should just define DEC in the Makefile... -gwr) - */ - -#include <sys/ioctl.h> -#include <net/if.h>				/* struct ifdevea */ - -getether(ifname, eap) -	char *ifname, *eap; -{ -	int rc = -1; -	int fd; -	struct ifdevea phys; -	bzero(&phys, sizeof(phys)); -	strcpy(phys.ifr_name, ifname); -	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { -		report(LOG_ERR, "getether: socket(INET,DGRAM) failed"); -		return -1; -	} -	if (ioctl(fd, SIOCRPHYSADDR, &phys) < 0) { -		report(LOG_ERR, "getether: ioctl SIOCRPHYSADDR failed"); -	} else { -		bcopy(&phys.current_pa[0], eap, EALEN); -		rc = 0; -	} -	close(fd); -	return rc; -} - -#define	GETETHER -#endif /* ultrix|osf1 */ - - -#ifdef	SUNOS - -#include <sys/sockio.h> -#include <sys/time.h>			/* needed by net_if.h */ -#include <net/nit_if.h>			/* for NIOCBIND */ -#include <net/if.h>				/* for struct ifreq */ - -getether(ifname, eap) -	char *ifname;				/* interface name from ifconfig structure */ -	char *eap;					/* Ether address (output) */ -{ -	int rc = -1; - -	struct ifreq ifrnit; -	int nit; - -	bzero((char *) &ifrnit, sizeof(ifrnit)); -	strncpy(&ifrnit.ifr_name[0], ifname, IFNAMSIZ); - -	nit = open("/dev/nit", 0); -	if (nit < 0) { -		report(LOG_ERR, "getether: open /dev/nit: %s", -			   get_errmsg()); -		return rc; -	} -	do { -		if (ioctl(nit, NIOCBIND, &ifrnit) < 0) { -			report(LOG_ERR, "getether: NIOCBIND on nit"); -			break; -		} -		if (ioctl(nit, SIOCGIFADDR, &ifrnit) < 0) { -			report(LOG_ERR, "getether: SIOCGIFADDR on nit"); -			break; -		} -		bcopy(&ifrnit.ifr_addr.sa_data[0], eap, EALEN); -		rc = 0; -	} while (0); -	close(nit); -	return rc; -} - -#define	GETETHER -#endif /* SUNOS */ - - -#if defined(__386BSD__) || defined(__NetBSD__) -/* Thanks to John Brezak <brezak@ch.hp.com> for this code. */ -#include <sys/ioctl.h> -#include <net/if.h> -#include <net/if_dl.h> -#include <net/if_types.h> - -getether(ifname, eap) -	char *ifname;				/* interface name from ifconfig structure */ -	char *eap;					/* Ether address (output) */ -{ -	int fd, rc = -1; -	register int n; -	struct ifreq ibuf[16], ifr; -	struct ifconf ifc; -	register struct ifreq *ifrp, *ifend; - -	/* Fetch the interface configuration */ -	fd = socket(AF_INET, SOCK_DGRAM, 0); -	if (fd < 0) { -		report(LOG_ERR, "getether: socket %s: %s", ifname, get_errmsg()); -		return (fd); -	} -	ifc.ifc_len = sizeof(ibuf); -	ifc.ifc_buf = (caddr_t) ibuf; -	if (ioctl(fd, SIOCGIFCONF, (char *) &ifc) < 0 || -		ifc.ifc_len < sizeof(struct ifreq)) { -		report(LOG_ERR, "getether: SIOCGIFCONF: %s", get_errmsg); -		goto out; -	} -	/* Search interface configuration list for link layer address. */ -	ifrp = ibuf; -	ifend = (struct ifreq *) ((char *) ibuf + ifc.ifc_len); -	while (ifrp < ifend) { -		/* Look for interface */ -		if (strcmp(ifname, ifrp->ifr_name) == 0 && -			ifrp->ifr_addr.sa_family == AF_LINK && -		((struct sockaddr_dl *) &ifrp->ifr_addr)->sdl_type == IFT_ETHER) { -			bcopy(LLADDR((struct sockaddr_dl *) &ifrp->ifr_addr), eap, EALEN); -			rc = 0; -			break; -		} -		/* Bump interface config pointer */ -		n = ifrp->ifr_addr.sa_len + sizeof(ifrp->ifr_name); -		if (n < sizeof(*ifrp)) -			n = sizeof(*ifrp); -		ifrp = (struct ifreq *) ((char *) ifrp + n); -	} - -  out: -	close(fd); -	return (rc); -} - -#define	GETETHER -#endif /* __NetBSD__ */ - - -#ifdef	SVR4 -/* - * This is for "Streams TCP/IP" by Lachman Associates. - * They sure made this cumbersome!  -gwr - */ - -#include <sys/sockio.h> -#include <sys/dlpi.h> -#include <stropts.h> -#ifndef NULL -#define NULL 0 -#endif - -getether(ifname, eap) -	char *ifname;				/* interface name from ifconfig structure */ -	char *eap;					/* Ether address (output) */ -{ -	int rc = -1; -	char devname[32]; -	char tmpbuf[sizeof(union DL_primitives) + 16]; -	struct strbuf cbuf; -	int fd, flags; -	union DL_primitives *dlp; -	char *enaddr; -	int unit = -1;				/* which unit to attach */ - -	sprintf(devname, "/dev/%s", ifname); -	fd = open(devname, 2); -	if (fd < 0) { -		/* Try without the trailing digit. */ -		char *p = devname + 5; -		while (isalpha(*p)) -			p++; -		if (isdigit(*p)) { -			unit = *p - '0'; -			*p = '\0'; -		} -		fd = open(devname, 2); -		if (fd < 0) { -			report(LOG_ERR, "getether: open %s: %s", -				   devname, get_errmsg()); -			return rc; -		} -	} -#ifdef	DL_ATTACH_REQ -	/* -	 * If this is a "Style 2" DLPI, then we must "attach" first -	 * to tell the driver which unit (board, port) we want. -	 * For now, decide this based on the device name. -	 * (Should do "info_req" and check dl_provider_style ...) -	 */ -	if (unit >= 0) { -		memset(tmpbuf, 0, sizeof(tmpbuf)); -		dlp = (union DL_primitives *) tmpbuf; -		dlp->dl_primitive = DL_ATTACH_REQ; -		dlp->attach_req.dl_ppa = unit; -		cbuf.buf = tmpbuf; -		cbuf.len = DL_ATTACH_REQ_SIZE; -		if (putmsg(fd, &cbuf, NULL, 0) < 0) { -			report(LOG_ERR, "getether: attach: putmsg: %s", get_errmsg()); -			goto out; -		} -		/* Recv the ack. */ -		cbuf.buf = tmpbuf; -		cbuf.maxlen = sizeof(tmpbuf); -		flags = 0; -		if (getmsg(fd, &cbuf, NULL, &flags) < 0) { -			report(LOG_ERR, "getether: attach: getmsg: %s", get_errmsg()); -			goto out; -		} -		/* -		 * Check the type, etc. -		 */ -		if (dlp->dl_primitive == DL_ERROR_ACK) { -			report(LOG_ERR, "getether: attach: dlpi_errno=%d, unix_errno=%d", -				   dlp->error_ack.dl_errno, -				   dlp->error_ack.dl_unix_errno); -			goto out; -		} -		if (dlp->dl_primitive != DL_OK_ACK) { -			report(LOG_ERR, "getether: attach: not OK or ERROR"); -			goto out; -		} -	} /* unit >= 0 */ -#endif	/* DL_ATTACH_REQ */ - -	/* -	 * Get the Ethernet address the same way the ARP module -	 * does when it is pushed onto a new stream (bind). -	 * One should instead be able just do an dl_info_req -	 * but many drivers do not supply the hardware address -	 * in the response to dl_info_req (they MUST supply it -	 * for dl_bind_ack because the ARP module requires it). -	 */ -	memset(tmpbuf, 0, sizeof(tmpbuf)); -	dlp = (union DL_primitives *) tmpbuf; -	dlp->dl_primitive = DL_BIND_REQ; -	dlp->bind_req.dl_sap = 0x8FF;	/* XXX - Unused SAP */ -	cbuf.buf = tmpbuf; -	cbuf.len = DL_BIND_REQ_SIZE; -	if (putmsg(fd, &cbuf, NULL, 0) < 0) { -		report(LOG_ERR, "getether: bind: putmsg: %s", get_errmsg()); -		goto out; -	} -	/* Recv the ack. */ -	cbuf.buf = tmpbuf; -	cbuf.maxlen = sizeof(tmpbuf); -	flags = 0; -	if (getmsg(fd, &cbuf, NULL, &flags) < 0) { -		report(LOG_ERR, "getether: bind: getmsg: %s", get_errmsg()); -		goto out; -	} -	/* -	 * Check the type, etc. -	 */ -	if (dlp->dl_primitive == DL_ERROR_ACK) { -		report(LOG_ERR, "getether: bind: dlpi_errno=%d, unix_errno=%d", -			   dlp->error_ack.dl_errno, -			   dlp->error_ack.dl_unix_errno); -		goto out; -	} -	if (dlp->dl_primitive != DL_BIND_ACK) { -		report(LOG_ERR, "getether: bind: not OK or ERROR"); -		goto out; -	} -	if (dlp->bind_ack.dl_addr_offset == 0) { -		report(LOG_ERR, "getether: bind: ack has no address"); -		goto out; -	} -	if (dlp->bind_ack.dl_addr_length < EALEN) { -		report(LOG_ERR, "getether: bind: ack address truncated"); -		goto out; -	} -	/* -	 * Copy the Ethernet address out of the message. -	 */ -	enaddr = tmpbuf + dlp->bind_ack.dl_addr_offset; -	memcpy(eap, enaddr, EALEN); -	rc = 0; - -  out: -	close(fd); -	return rc; -} - -#define	GETETHER -#endif /* SVR4 */ - - -#ifdef	linux -/* - * This is really easy on Linux!  This version (for linux) - * written by Nigel Metheringham <nigelm@ohm.york.ac.uk> - * - * The code is almost identical to the Ultrix code - however - * the names are different to confuse the innocent :-) - * Most of this code was stolen from the Ultrix bit above. - */ - -#include <sys/ioctl.h> -#include <net/if.h>	       	/* struct ifreq */ - -/* In a properly configured system this should be either sys/socketio.h -   or sys/sockios.h, but on my distribution these don't line up correctly */ -#include <linux/sockios.h>	/* Needed for IOCTL defs */ - -getether(ifname, eap) -	char *ifname, *eap; -{ -	int rc = -1; -	int fd; -	struct ifreq phys; -	bzero(&phys, sizeof(phys)); -	strcpy(phys.ifr_name, ifname); -	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { -		report(LOG_ERR, "getether: socket(INET,DGRAM) failed"); -		return -1; -	} -	if (ioctl(fd, SIOCGIFHWADDR, &phys) < 0) { -		report(LOG_ERR, "getether: ioctl SIOCGIFHWADDR failed"); -	} else { -		bcopy(phys.ifr_hwaddr, eap, EALEN); -		rc = 0; -	} -	close(fd); -	return rc; -} - -#define	GETETHER -#endif	/* linux */ - - -/* If we don't know how on this system, just return an error. */ -#ifndef	GETETHER -getether(ifname, eap) -	char *ifname, *eap; -{ -	return -1; -} - -#endif /* !GETETHER */ - -/* - * Local Variables: - * tab-width: 4 - * c-indent-level: 4 - * c-argdecl-indent: 4 - * c-continued-statement-offset: 4 - * c-continued-brace-offset: -4 - * c-label-offset: -4 - * c-brace-offset: 0 - * End: - */ diff --git a/usr.sbin/bootpd/hwaddr.c b/usr.sbin/bootpd/hwaddr.c deleted file mode 100644 index ec515c40e0625..0000000000000 --- a/usr.sbin/bootpd/hwaddr.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * hwaddr.c - routines that deal with hardware addresses. - * (i.e. Ethernet) - */ - -#include <sys/types.h> -#include <sys/param.h> -#include <sys/socket.h> -#include <sys/ioctl.h> - -#if defined(SUNOS) || defined(SVR4) -#include <sys/sockio.h> -#endif -#ifdef	SVR4 -#include <sys/stream.h> -#include <stropts.h> -#include <fcntl.h> -#endif - -#include <net/if_arp.h> -#include <netinet/in.h> -#include <stdio.h> -#ifndef	NO_UNISTD -#include <unistd.h> -#endif -#include <syslog.h> - -#ifndef USE_BFUNCS -/* Yes, memcpy is OK here (no overlapped copies). */ -#include <memory.h> -#define bcopy(a,b,c)    memcpy(b,a,c) -#define bzero(p,l)      memset(p,0,l) -#define bcmp(a,b,c)     memcmp(a,b,c) -#endif - -#include "bptypes.h" -#include "hwaddr.h" -#include "report.h" - -extern int debug; - -/* - * Hardware address lengths (in bytes) and network name based on hardware - * type code.  List in order specified by Assigned Numbers RFC; Array index - * is hardware type code.  Entries marked as zero are unknown to the author - * at this time.  .  .  . - */ - -struct hwinfo hwinfolist[] = -{ -	{0, "Reserved"},			/* Type 0:  Reserved (don't use this)   */ -	{6, "Ethernet"},			/* Type 1:  10Mb Ethernet (48 bits)	*/ -	{1, "3Mb Ethernet"},		/* Type 2:   3Mb Ethernet (8 bits)	*/ -	{0, "AX.25"},				/* Type 3:  Amateur Radio AX.25		*/ -	{1, "ProNET"},				/* Type 4:  Proteon ProNET Token Ring   */ -	{0, "Chaos"},				/* Type 5:  Chaos			*/ -	{6, "IEEE 802"},			/* Type 6:  IEEE 802 Networks		*/ -	{0, "ARCNET"}				/* Type 7:  ARCNET			*/ -}; -int hwinfocnt = sizeof(hwinfolist) / sizeof(hwinfolist[0]); - - -/* - * Setup the arp cache so that IP address 'ia' will be temporarily - * bound to hardware address 'ha' of length 'len'. - */ -void -setarp(s, ia, ha, len) -	int s;						/* socket fd */ -	struct in_addr *ia; -	u_char *ha; -	int len; -{ -#ifdef	SIOCSARP -	struct arpreq arpreq;		/* Arp request ioctl block */ -	struct sockaddr_in *si; -#ifdef	SVR4 -	int fd; -	struct strioctl iocb; -#endif	/* SVR4 */ - -	bzero((caddr_t) & arpreq, sizeof(arpreq)); -	arpreq.arp_flags = ATF_INUSE | ATF_COM; - -	/* Set up the protocol address. */ -	arpreq.arp_pa.sa_family = AF_INET; -	si = (struct sockaddr_in *) &arpreq.arp_pa; -	si->sin_addr = *ia; - -	/* Set up the hardware address. */ -	bcopy(ha, arpreq.arp_ha.sa_data, len); - -#ifdef	SVR4 -	/* -	 * And now the stuff for System V Rel 4.x which does not -	 * appear to allow SIOCxxx ioctls on a socket descriptor. -	 * Thanks to several people: (all sent the same fix) -	 *   Barney Wolff <barney@databus.com>, -	 *   bear@upsys.se (Bj|rn Sj|holm), -	 *   Michael Kuschke <Michael.Kuschke@Materna.DE>, -	 */ -	if ((fd=open("/dev/arp", O_RDWR)) < 0) { -	    report(LOG_ERR, "open /dev/arp: %s\n", get_errmsg()); -	} -	iocb.ic_cmd = SIOCSARP; -	iocb.ic_timout = 0; -	iocb.ic_dp = (char *)&arpreq; -	iocb.ic_len = sizeof(arpreq); -	if (ioctl(fd, I_STR, (caddr_t)&iocb) < 0) { -	    report(LOG_ERR, "ioctl I_STR: %s\n", get_errmsg()); -	} -	close (fd); - -#else	/* SVR4 */ -	/* -	 * On SunOS, the ioctl sometimes returns ENXIO, and it -	 * appears to happen when the ARP cache entry you tried -	 * to add is already in the cache.  (Sigh...) -	 * XXX - Should this error simply be ignored? -gwr -	 */ -	if (ioctl(s, SIOCSARP, (caddr_t) & arpreq) < 0) { -		report(LOG_ERR, "ioctl SIOCSARP: %s", get_errmsg()); -	} -#endif	/* SVR4 */ -#else	/* SIOCSARP */ -	/* -	 * Oh well, SIOCSARP is not defined.  Just run arp(8). -	 * XXX - Gag! -	 */ -	char buf[256]; -	int status; - -	sprintf(buf, "arp -s %s %s temp", -			inet_ntoa(*ia), haddrtoa(ha, len)); -	if (debug > 2) -		report(LOG_INFO, buf); -	status = system(buf); -	if (status) -		report(LOG_ERR, "arp failed, exit code=0x%x", status); -	return; -#endif	/* SIOCSARP */ -} - - -/* - * Convert a hardware address to an ASCII string. - */ -char * -haddrtoa(haddr, hlen) -	u_char *haddr; -	int hlen; -{ -	static char haddrbuf[3 * MAXHADDRLEN + 1]; -	char *bufptr; - -	if (hlen > MAXHADDRLEN) -		hlen = MAXHADDRLEN; - -	bufptr = haddrbuf; -	while (hlen > 0) { -		sprintf(bufptr, "%02X:", (unsigned) (*haddr++ & 0xFF)); -		bufptr += 3; -		hlen--; -	} -	bufptr[-1] = 0; -	return (haddrbuf); -} - - -/* - * haddr_conv802() - * -------------- - * - * Converts a backwards address to a canonical address and a canonical address - * to a backwards address. - * - * INPUTS: - *  adr_in - pointer to six byte string to convert (unsigned char *) - *  addr_len - how many bytes to convert - * - * OUTPUTS: - *  addr_out - The string is updated to contain the converted address. - * - * CALLER: - *  many - * - * DATA: - *  Uses conv802table to bit-reverse the address bytes. - */ - -static u_char conv802table[256] = -{ -	/* 0x00 */ 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, -	/* 0x08 */ 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, -	/* 0x10 */ 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, -	/* 0x18 */ 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, -	/* 0x20 */ 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, -	/* 0x28 */ 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, -	/* 0x30 */ 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, -	/* 0x38 */ 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, -	/* 0x40 */ 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, -	/* 0x48 */ 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, -	/* 0x50 */ 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, -	/* 0x58 */ 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, -	/* 0x60 */ 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, -	/* 0x68 */ 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, -	/* 0x70 */ 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, -	/* 0x78 */ 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, -	/* 0x80 */ 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, -	/* 0x88 */ 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, -	/* 0x90 */ 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, -	/* 0x98 */ 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, -	/* 0xA0 */ 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, -	/* 0xA8 */ 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, -	/* 0xB0 */ 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, -	/* 0xB8 */ 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, -	/* 0xC0 */ 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, -	/* 0xC8 */ 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, -	/* 0xD0 */ 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, -	/* 0xD8 */ 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, -	/* 0xE0 */ 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, -	/* 0xE8 */ 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, -	/* 0xF0 */ 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, -	/* 0xF8 */ 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, -}; - -void -haddr_conv802(addr_in, addr_out, len) -	register u_char *addr_in, *addr_out; -	int len; -{ -	u_char *lim; - -	lim = addr_out + len; -	while (addr_out < lim) -		*addr_out++ = conv802table[*addr_in++]; -} - -#if 0 -/* - * For the record, here is a program to generate the - * bit-reverse table above. - */ -static int -bitrev(n) -	int n; -{ -	int i, r; - -	r = 0; -	for (i = 0; i < 8; i++) { -		r <<= 1; -		r |= (n & 1); -		n >>= 1; -	} -	return r; -} - -main() -{ -	int i; -	for (i = 0; i <= 0xFF; i++) { -		if ((i & 7) == 0) -			printf("/* 0x%02X */", i); -		printf(" 0x%02X,", bitrev(i)); -		if ((i & 7) == 7) -			printf("\n"); -	} -} - -#endif - -/* - * Local Variables: - * tab-width: 4 - * c-indent-level: 4 - * c-argdecl-indent: 4 - * c-continued-statement-offset: 4 - * c-continued-brace-offset: -4 - * c-label-offset: -4 - * c-brace-offset: 0 - * End: - */ diff --git a/usr.sbin/bootpef/Makefile b/usr.sbin/bootpef/Makefile deleted file mode 100644 index dccbc69694f93..0000000000000 --- a/usr.sbin/bootpef/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# bootpef/Makefile -# $Id: Makefile,v 1.2 1994/06/27 21:31:21 gwr Exp $ - -PROG=	bootpef -SRCDIR= ${.CURDIR}/../bootpd -CFLAGS+= -DETC_ETHERS -DDEBUG -I${SRCDIR} -.PATH: ${SRCDIR} - -SRCS=	bootpef.c dovend.c readfile.c hash.c dumptab.c \ -	 lookup.c hwaddr.c report.c tzone.c - -MAN8=	bootpef.0 - -.include <bsd.prog.mk> - diff --git a/usr.sbin/bootpgw/Makefile b/usr.sbin/bootpgw/Makefile deleted file mode 100644 index 677868d5dfb6c..0000000000000 --- a/usr.sbin/bootpgw/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# bootpgw/Makefile -# $Id: Makefile,v 1.1.1.1 1994/06/27 21:29:46 gwr Exp $ - -PROG=	bootpgw -SRCDIR= ${.CURDIR}/../bootpd -CFLAGS+= -DSYSLOG -DDEBUG -I${SRCDIR} -.PATH: ${SRCDIR} - -SRCS=	bootpgw.c getif.c hwaddr.c report.c - -MAN8= - -.include <bsd.prog.mk> - diff --git a/usr.sbin/bootptest/Makefile b/usr.sbin/bootptest/Makefile deleted file mode 100644 index c47790ca2d24d..0000000000000 --- a/usr.sbin/bootptest/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# bootptest/Makefile -# $Id: Makefile,v 1.3 1994/08/22 22:19:04 gwr Exp $ - -PROG=	bootptest -SRCDIR= ${.CURDIR}/../bootpd -CFLAGS+= -I${SRCDIR} -.PATH: ${SRCDIR} - -SRCS=	bootptest.c print-bootp.c getif.c getether.c report.c - -MAN8=	bootptest.0 - -.include <bsd.prog.mk> - diff --git a/usr.sbin/newsyslog/Makefile b/usr.sbin/newsyslog/Makefile deleted file mode 100644 index c04af65ac0db1..0000000000000 --- a/usr.sbin/newsyslog/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -#	$Id: Makefile,v 1.6 1994/12/22 12:30:26 cgd Exp $ - -PROG=	newsyslog - -CFLAGS+= -DOSF -CFLAGS+= -DCONF=\"/etc/newsyslog.conf\" -CFLAGS+= -DPIDFILE=\"/var/run/syslog.pid\" -CFLAGS+= -DCOMPRESS=\"/usr/bin/gzip\" -CFLAGS+= -DCOMPRESS_POSTFIX=\".gz\" - -BINOWN=	root - -MAN8=	newsyslog.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/newsyslog/newsyslog.8 b/usr.sbin/newsyslog/newsyslog.8 deleted file mode 100644 index 72e481655db34..0000000000000 --- a/usr.sbin/newsyslog/newsyslog.8 +++ /dev/null @@ -1,168 +0,0 @@ -.TH NEWSYSLOG 8 "January 12, 1989" "Project Athena" -.ns -.\" This file contains changes from the Open Software Foundation. -.\" -.\"	from: @(#)newsyslog.8 -.\"	$Id: newsyslog.8,v 1.6 1995/01/06 19:20:20 jtc Exp $ -.\" -.\" Copyright 1988, 1989 by the Massachusetts Institute of Technology -.\"  -.\" Permission to use, copy, modify, and distribute this software -.\" and its documentation for any purpose and without fee is -.\" hereby granted, provided that the above copyright notice -.\" appear in all copies and that both that copyright notice and -.\" this permission notice appear in supporting documentation, -.\" and that the names of M.I.T. and the M.I.T. S.I.P.B. not be -.\" used in advertising or publicity pertaining to distribution -.\" of the software without specific, written prior permission. -.\" M.I.T. and the M.I.T. S.I.P.B. make no representations about -.\" the suitability of this software for any purpose.  It is -.\" provided "as is" without express or implied warranty. -.\" -.sp -.SH NAME -newsyslog \- maintain system log files to manageable sizes -.SH SYNOPSIS -.B /usr/bin/newsyslog -[ -.B \-vnr -] [ -.B \-f -.I configuration file -] -.SH DESCRIPTION -.I Newsyslog -is a program that should be scheduled to run periodically by -.IR crontab . -When it is executed it archives log files if necessary.  If a log file -is determined to require archiving,  -.I newsyslog -rearranges the files so that ``logfile'' is empty, ``logfile.0'' has -the last period's logs in it, ``logfile.1'' has the next to last -period's logs in it, and so on, up to a user-specified number of -archived logs.  Optionally the archived logs can be compressed to save -space.  -.PP -A log can be archived because of two reasons.  The log file can have -grown bigger than a preset size in kilobytes, or a preset number of -hours may have elapsed since the last log archive.  The granularity of -.I newsyslog -is dependent on how often it is scheduled to run in crontab.  Since -the program is quite fast, it may be scheduled to run every hour -without any ill effects. -.PP -When starting up,  -.I newsyslog -reads in a configuration file to determine which logs should be looked -at.  By default, this configuration file is  -.IR /etc/newsyslog.conf . -Each line of the file contains information about a particular log file -that should be handled by -.IR newsyslog . -Each line has five mandatory fields and two optional fields, with a -whitespace separating each field.  Blank lines or lines beginning with -``#'' are ignored.  The fields of the configuration file are as -follows:  -.br -	logfile name -.br -	owner.group of archives (optional) -.br -	mode of logfile & archives -.br -	number of archives -.br -	size of archives -.br -	archive interval -.br -	flags (optional) -.PP -The -.I logfile name -entry is the name of the system log file to be archived. -.PP -The optional -.I owner.group -entry specifies an ownership and group for the archive file. -The "." is essential, even if the  -.I owner -or -.I group -field is left blank. The -fields may be numeric, or a name which is looked up in  -.I /etc/passwd -or  -.IR /etc/group . -.PP -The -.I number of archives -entry specifies the number of archives to be kept besides the log file -itself.   -.PP -When the size of the logfile reaches  -.I size of  -.IR archives , -the logfile becomes trimmed as described above.  If this field is -replaced by a ``*'', then the size of the logfile is not taken into -account when determining when to trim the log file. -.PP -The -.I number of hours -entry specifies the time separation between the trimming of the log -file.  If this field is replaced by a ``*'', then the number of hours -since the last time the log was trimmed will not be taken into -consideration. -.PP -The -.I flags -field specifies if the archives should have any special processing -done to the archived log files.  The ``Z'' flag will make the archive -files compressed to save space using /usr/bin/gzip.  The ``B'' flag -means that the file is a binary file, and so the ascii message which -.I newsyslog -inserts to indicate the fact that the logs have been turned over -should not be included. -.PP -.SH OPTIONS -The following options can be used with newsyslog: -.TP -.B \-f \fIconfig-file -instructs newsyslog to use  -.I config-file -instead of /etc/newsyslog.conf for its configuration file. -.TP -.B \-v -places  -.I newsyslog -in verbose mode.  In this mode it will print out each log and its -reasons for either trimming that log or skipping it. -.TP -.B \-n -causes -.I newsyslog  -not to trim the logs, but to print out what it would do if this option -were not specified. -.TP -.B \-r -removes the restriction that -.I newsyslog  -must be running as root.  Of course,  -.I newsyslog -will not be able to send a HUP signal to -.IR syslogd , -so this option should only be used in debugging. -.SH FILES -/etc/newsyslog.conf -.SH BUGS -Doesn't yet automatically read the logs to find security breaches. - - -.SH AUTHOR -Theodore Ts'o, MIT Project Athena -.br -Copyright 1987, Massachusetts Institute of Technology -.SH "SEE ALSO" -syslogd(8), syslog(3), gzip(1) -.ns -.sp diff --git a/usr.sbin/newsyslog/newsyslog.c b/usr.sbin/newsyslog/newsyslog.c deleted file mode 100644 index ba21b6ee84e66..0000000000000 --- a/usr.sbin/newsyslog/newsyslog.c +++ /dev/null @@ -1,568 +0,0 @@ -/* - * This file contains changes from the Open Software Foundation. - */ - -/* - -Copyright 1988, 1989 by the Massachusetts Institute of Technology - -Permission to use, copy, modify, and distribute this software -and its documentation for any purpose and without fee is -hereby granted, provided that the above copyright notice -appear in all copies and that both that copyright notice and -this permission notice appear in supporting documentation, -and that the names of M.I.T. and the M.I.T. S.I.P.B. not be -used in advertising or publicity pertaining to distribution -of the software without specific, written prior permission. -M.I.T. and the M.I.T. S.I.P.B. make no representations about -the suitability of this software for any purpose.  It is -provided "as is" without express or implied warranty. - -*/ - -/* - *      newsyslog - roll over selected logs at the appropriate time, - *              keeping the a specified number of backup files around. - * - *      $Source: /a/cvsroot/src/usr.bin/newsyslog/newsyslog.c,v $ - *      $Author: jtc $ - */ - -#ifndef lint -static char rcsid[] = "$Id: newsyslog.c,v 1.9 1995/01/21 21:53:46 jtc Exp $"; -#endif /* not lint */ - -#ifndef CONF -#define CONF "/etc/athena/newsyslog.conf" /* Configuration file */ -#endif -#ifndef PIDFILE -#define PIDFILE "/etc/syslog.pid" -#endif -#ifndef COMPRESS -#define COMPRESS "/usr/ucb/compress" /* File compression program */ -#endif -#ifndef COMPRESS_POSTFIX -#define COMPRESS_POSTFIX ".Z" -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <signal.h> -#include <pwd.h> -#include <grp.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/param.h> -#include <sys/wait.h> - -#define kbytes(size)  (((size) + 1023) >> 10) -#ifdef _IBMR2 -/* Calculates (db * DEV_BSIZE) */ -#define dbtob(db)  ((unsigned)(db) << UBSHIFT)  -#endif - -#define CE_COMPACT 1            /* Compact the achived log files */ -#define CE_BINARY 2             /* Logfile is in binary, don't add */ -                                /* status messages */ -#define NONE -1 -         -struct conf_entry { -        char    *log;           /* Name of the log */ -        int     uid;            /* Owner of log */ -        int     gid;            /* Group of log */ -        int     numlogs;        /* Number of logs to keep */ -        int     size;           /* Size cutoff to trigger trimming the log */ -        int     hours;          /* Hours between log trimming */ -        int     permissions;    /* File permissions on the log */ -        int     flags;          /* Flags (CE_COMPACT & CE_BINARY)  */ -        struct conf_entry       *next; /* Linked list pointer */ -}; - -extern int      optind; -extern char     *optarg; -extern char *malloc(); -extern uid_t getuid(),geteuid(); -extern time_t time(); - -char    *progname;              /* contains argv[0] */ -int     verbose = 0;            /* Print out what's going on */ -int     needroot = 1;           /* Root privs are necessary */ -int     noaction = 0;           /* Don't do anything, just show it */ -char    *conf = CONF;           /* Configuration file to use */ -time_t  timenow; -int     syslog_pid;             /* read in from /etc/syslog.pid */ -#define MIN_PID		3 -#define MAX_PID		65534 -char    hostname[64];           /* hostname */ -char    *daytime;               /* timenow in human readable form */ - - -struct conf_entry *parse_file(); -char *sob(), *son(), *strdup(), *missing_field(); - -main(argc,argv) -        int argc; -        char **argv; -{ -        struct conf_entry *p, *q; -         -        PRS(argc,argv); -        if (needroot && getuid() && geteuid()) { -                fprintf(stderr,"%s: must have root privs\n",progname); -                exit(1); -        } -        p = q = parse_file(); -        while (p) { -                do_entry(p); -                p=p->next; -                free((char *) q); -                q=p; -        } -        exit(0); -} - -do_entry(ent) -        struct conf_entry       *ent; -         -{ -        int     size, modtime; -         -        if (verbose) { -                if (ent->flags & CE_COMPACT) -                        printf("%s <%dZ>: ",ent->log,ent->numlogs); -                else -                        printf("%s <%d>: ",ent->log,ent->numlogs); -        } -        size = sizefile(ent->log); -        modtime = age_old_log(ent->log); -        if (size < 0) { -                if (verbose) -                        printf("does not exist.\n"); -        } else { -                if (verbose && (ent->size > 0)) -                        printf("size (Kb): %d [%d] ", size, ent->size); -                if (verbose && (ent->hours > 0)) -                        printf(" age (hr): %d [%d] ", modtime, ent->hours); -                if (((ent->size > 0) && (size >= ent->size)) || -                    ((ent->hours > 0) && ((modtime >= ent->hours) -                                        || (modtime < 0)))) { -                        if (verbose) -                                printf("--> trimming log....\n"); -                        if (noaction && !verbose) { -                                if (ent->flags & CE_COMPACT) -                                        printf("%s <%dZ>: trimming", -                                               ent->log,ent->numlogs); -                                else -                                        printf("%s <%d>: trimming", -                                               ent->log,ent->numlogs); -                        } -                        dotrim(ent->log, ent->numlogs, ent->flags, -                               ent->permissions, ent->uid, ent->gid); -                } else { -                        if (verbose) -                                printf("--> skipping\n"); -                } -        } -} - -PRS(argc,argv) -        int argc; -        char **argv; -{ -        int     c; -        FILE    *f; -        char    line[BUFSIZ]; -	char	*p; - -        progname = argv[0]; -        timenow = time((time_t *) 0); -        daytime = ctime(&timenow) + 4; -        daytime[16] = '\0'; - -        /* Let's find the pid of syslogd */ -        syslog_pid = 0; -        f = fopen(PIDFILE,"r"); -        if (f && fgets(line,BUFSIZ,f)) -                syslog_pid = atoi(line); -	if (f) -		(void)fclose(f); - -        /* Let's get our hostname */ -        (void) gethostname(hostname, sizeof(hostname)); - -	/* Truncate domain */ -	if (p = strchr(hostname, '.')) { -		*p = '\0'; -	} - -        optind = 1;             /* Start options parsing */ -        while ((c=getopt(argc,argv,"nrvf:t:")) != EOF) -                switch (c) { -                case 'n': -                        noaction++; /* This implies needroot as off */ -                        /* fall through */ -                case 'r': -                        needroot = 0; -                        break; -                case 'v': -                        verbose++; -                        break; -                case 'f': -                        conf = optarg; -                        break; -                default: -                        usage(); -                } -        } - -usage() -{ -        fprintf(stderr, -                "Usage: %s <-nrv> <-f config-file>\n", progname); -        exit(1); -} - -/* Parse a configuration file and return a linked list of all the logs - * to process - */ -struct conf_entry *parse_file() -{ -        FILE    *f; -        char    line[BUFSIZ], *parse, *q; -        char    *errline, *group; -        struct conf_entry *first = NULL; -        struct conf_entry *working; -        struct passwd *pass; -        struct group *grp; - -        if (strcmp(conf,"-")) -                f = fopen(conf,"r"); -        else -                f = stdin; -        if (!f) { -                (void) fprintf(stderr,"%s: ",progname); -                perror(conf); -                exit(1); -        } -        while (fgets(line,BUFSIZ,f)) { -                if ((line[0]== '\n') || (line[0] == '#')) -                        continue; -                errline = strdup(line); -                if (!first) { -                        working = (struct conf_entry *) malloc(sizeof(struct conf_entry)); -                        first = working; -                } else { -                        working->next = (struct conf_entry *) malloc(sizeof(struct conf_entry)); -                        working = working->next; -                } - -                q = parse = missing_field(sob(line),errline); -                *(parse = son(line)) = '\0'; -                working->log = strdup(q); - -                q = parse = missing_field(sob(++parse),errline); -                *(parse = son(parse)) = '\0'; -                if ((group = strchr(q, '.')) != NULL) { -                    *group++ = '\0'; -                    if (*q) { -                        if (!(isnumber(*q))) { -                            if ((pass = getpwnam(q)) == NULL) { -                                fprintf(stderr, -                                    "Error in config file; unknown user:\n"); -                                fputs(errline,stderr); -                                exit(1); -                            } -                            working->uid = pass->pw_uid; -                        } else -                            working->uid = atoi(q); -                    } else -                        working->uid = NONE; -                     -                    q = group; -                    if (*q) { -                        if (!(isnumber(*q))) { -                            if ((grp = getgrnam(q)) == NULL) { -                                fprintf(stderr, -                                    "Error in config file; unknown group:\n"); -                                fputs(errline,stderr); -                                exit(1); -                            } -                            working->gid = grp->gr_gid; -                        } else -                            working->gid = atoi(q); -                    } else -                        working->gid = NONE; -                     -                    q = parse = missing_field(sob(++parse),errline); -                    *(parse = son(parse)) = '\0'; -                } -                else  -                    working->uid = working->gid = NONE; - -                if (!sscanf(q,"%o",&working->permissions)) { -                        fprintf(stderr, -                                "Error in config file; bad permissions:\n"); -                        fputs(errline,stderr); -                        exit(1); -                } - -                q = parse = missing_field(sob(++parse),errline); -                *(parse = son(parse)) = '\0'; -                if (!sscanf(q,"%d",&working->numlogs)) { -                        fprintf(stderr, -                                "Error in config file; bad number:\n"); -                        fputs(errline,stderr); -                        exit(1); -                } - -                q = parse = missing_field(sob(++parse),errline); -                *(parse = son(parse)) = '\0'; -                if (isdigit(*q)) -                        working->size = atoi(q); -                else -                        working->size = -1; -                 -                q = parse = missing_field(sob(++parse),errline); -                *(parse = son(parse)) = '\0'; -                if (isdigit(*q)) -                        working->hours = atoi(q); -                else -                        working->hours = -1; - -                q = parse = sob(++parse); /* Optional field */ -                *(parse = son(parse)) = '\0'; -                working->flags = 0; -                while (q && *q && !isspace(*q)) { -                        if ((*q == 'Z') || (*q == 'z')) -                                working->flags |= CE_COMPACT; -                        else if ((*q == 'B') || (*q == 'b')) -                                working->flags |= CE_BINARY; -                        else { -                                fprintf(stderr, -                                        "Illegal flag in config file -- %c\n", -                                        *q); -                                exit(1); -                        } -                        q++; -                } -                 -                free(errline); -        } -        if (working) -                working->next = (struct conf_entry *) NULL; -        (void) fclose(f); -        return(first); -} - -char *missing_field(p,errline) -        char    *p,*errline; -{ -        if (!p || !*p) { -                fprintf(stderr,"Missing field in config file:\n"); -                fputs(errline,stderr); -                exit(1); -        } -        return(p); -} - -dotrim(log,numdays,flags,perm,owner_uid,group_gid) -        char    *log; -        int     numdays; -        int     flags; -        int     perm; -        int     owner_uid; -        int     group_gid; -{ -        char    file1[128], file2[128]; -        char    zfile1[128], zfile2[128]; -        int     fd; -        struct  stat st; - -#ifdef _IBMR2 -/* AIX 3.1 has a broken fchown- if the owner_uid is -1, it will actually */ -/* change it to be owned by uid -1, instead of leaving it as is, as it is */ -/* supposed to. */ -                if (owner_uid == -1) -                  owner_uid = geteuid(); -#endif - -        /* Remove oldest log */ -        (void) sprintf(file1,"%s.%d",log,numdays); -        (void) strcpy(zfile1, file1); -        (void) strcat(zfile1, COMPRESS_POSTFIX); - -        if (noaction) { -                printf("rm -f %s\n", file1); -                printf("rm -f %s\n", zfile1); -        } else { -                (void) unlink(file1); -                (void) unlink(zfile1); -        } - -        /* Move down log files */ -        while (numdays--) { -                (void) strcpy(file2,file1); -                (void) sprintf(file1,"%s.%d",log,numdays); -                (void) strcpy(zfile1, file1); -                (void) strcpy(zfile2, file2); -                if (lstat(file1, &st)) { -                        (void) strcat(zfile1, COMPRESS_POSTFIX); -                        (void) strcat(zfile2, COMPRESS_POSTFIX); -                        if (lstat(zfile1, &st)) continue; -                } -                if (noaction) { -                        printf("mv %s %s\n",zfile1,zfile2); -                        printf("chmod %o %s\n", perm, zfile2); -                        printf("chown %d.%d %s\n", -                               owner_uid, group_gid, zfile2); -                } else { -                        (void) rename(zfile1, zfile2); -                        (void) chmod(zfile2, perm); -                        (void) chown(zfile2, owner_uid, group_gid); -                } -        } -        if (!noaction && !(flags & CE_BINARY)) -                (void) log_trim(log);  /* Report the trimming to the old log */ - -        if (noaction)  -                printf("mv %s to %s\n",log,file1); -        else -                (void) rename(log,file1); -        if (noaction)  -                printf("Start new log..."); -        else { -                fd = creat(log,perm); -                if (fd < 0) { -                        perror("can't start new log"); -                        exit(1); -                }                -                if (fchown(fd, owner_uid, group_gid)) { -                        perror("can't chmod new log file"); -                        exit(1); -                } -                (void) close(fd); -                if (!(flags & CE_BINARY)) -                        if (log_trim(log)) {    /* Add status message */ -                                perror("can't add status message to log"); -                                exit(1); -                        } -        } -        if (noaction) -                printf("chmod %o %s...",perm,log); -        else -                (void) chmod(log,perm); -        if (noaction) -                printf("kill -HUP %d (syslogd)\n",syslog_pid); -        else -	if (syslog_pid < MIN_PID || syslog_pid > MAX_PID) { -		fprintf(stderr,"%s: preposterous process number: %d\n", -				progname, syslog_pid); -        } else if (kill(syslog_pid,SIGHUP)) { -                        fprintf(stderr,"%s: ",progname); -                        perror("warning - could not restart syslogd"); -                } -        if (flags & CE_COMPACT) { -                if (noaction) -                        printf("Compress %s.0\n",log); -                else -                        compress_log(log); -        } -} - -/* Log the fact that the logs were turned over */ -log_trim(log) -        char    *log; -{ -        FILE    *f; -        if ((f = fopen(log,"a")) == NULL) -                return(-1); -        fprintf(f,"%s %s newsyslog[%d]: logfile turned over\n", -                daytime, hostname, getpid()); -        if (fclose(f) == EOF) { -                perror("log_trim: fclose:"); -                exit(1); -        } -        return(0); -} - -/* Fork of /usr/ucb/compress to compress the old log file */ -compress_log(log) -        char    *log; -{ -        int     pid; -        char    tmp[128]; -         -        pid = fork(); -        (void) sprintf(tmp,"%s.0",log); -        if (pid < 0) { -                fprintf(stderr,"%s: ",progname); -                perror("fork"); -                exit(1); -        } else if (!pid) { -                (void) execl(COMPRESS,"compress","-f",tmp,0); -                fprintf(stderr,"%s: ",progname); -                perror(COMPRESS); -                exit(1); -        } -} - -/* Return size in kilobytes of a file */ -int sizefile(file) -        char    *file; -{ -        struct stat sb; - -        if (stat(file,&sb) < 0) -                return(-1); -        return(kbytes(dbtob(sb.st_blocks))); -} - -/* Return the age of old log file (file.0) */ -int age_old_log(file) -        char    *file; -{ -        struct stat sb; -        char tmp[MAXPATHLEN+3]; - -        (void) strcpy(tmp,file); -        if (stat(strcat(tmp,".0"),&sb) < 0) -            if (stat(strcat(tmp,COMPRESS_POSTFIX), &sb) < 0) -                return(-1); -        return( (int) (timenow - sb.st_mtime + 1800) / 3600); -} - - -#ifndef OSF -/* Duplicate a string using malloc */ - -char *strdup(strp) -register char   *strp; -{ -        register char *cp; - -        if ((cp = malloc((unsigned) strlen(strp) + 1)) == NULL) -                abort(); -        return(strcpy (cp, strp)); -} -#endif - -/* Skip Over Blanks */ -char *sob(p) -        register char   *p; -{ -        while (p && *p && isspace(*p)) -                p++; -        return(p); -} - -/* Skip Over Non-Blanks */ -char *son(p) -        register char   *p; -{ -        while (p && *p && !isspace(*p)) -                p++; -        return(p); -} diff --git a/usr.sbin/quot/Makefile b/usr.sbin/quot/Makefile deleted file mode 100644 index aca581b820d3e..0000000000000 --- a/usr.sbin/quot/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -#	$Id: Makefile,v 1.3 1994/12/22 11:39:03 cgd Exp $ - -PROG=	quot -MAN=	quot.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/quot/quot.8 b/usr.sbin/quot/quot.8 deleted file mode 100644 index 7b964d944c337..0000000000000 --- a/usr.sbin/quot/quot.8 +++ /dev/null @@ -1,96 +0,0 @@ -.\" Copyright (C) 1994 Wolfgang Solfrank. -.\" Copyright (C) 1994 TooLs GmbH. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\"    notice, this list of conditions and the following disclaimer in the -.\"    documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\"    must display the following acknowledgement: -.\"	This product includes software developed by TooLs GmbH. -.\" 4. The name of TooLs GmbH may not be used to endorse or promote products -.\"    derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\"	$Id: quot.8,v 1.3 1994/03/19 07:59:47 cgd Exp $ -.\" -.Dd February 8, 1994 -.Dt QUOT 8 -.Os BSD 4 -.Sh NAME -.Nm quot -.Nd display disk space occupied by each user -.Sh SYNOPSIS -.Nm quot -.Op Fl acfhknv -.Op Ar filesystem ... -.Sh DESCRIPTION -.Nm Quot -is used to gather statistics about the disk usage for each local user. -.Pp -The following options are available: -.Bl -tag -width Ds -.It Fl a -Include statistics for all mounted filesystems. -.It Fl c -Display three columns containing number of blocks per file, -number of files in this category, and aggregate total of -blocks in files with this or lower size. -.It Fl f -For each user, display count of files and space occupied. -.It Fl h -Estimate the number of blocks in each file based on its size. -Despite that this doesn't give the correct resuls (it doesn't -account for the holes in files), this option isn't any faster -and thus is discouraged. -.It Fl k -By default, all sizes are reported in 512-byte block counts. -The -.Fl k -options causes the numbers to be reported in kilobyte counts. -.It Fl n -Given a list of inodes (plus some optional data on each line) -in the standard input, for each file print out the owner (plus -the remainder of the input line). This is traditionally used -in the pipe: -.Bd -literal -offset indent -ncheck filesystem | sort +0n | quot -n filesystem -.Ed -.Pp -to get a report of files and their owners. -.It Fl v -In addition to the default output, display the number of files -not accessed within 30, 60 and 90 days. -.El -.Sh ENVIRONMENTAL VARIABLES -.Bl -tag -width BLOCKSIZE -.It Ev BLOCKSIZE -If the environmental variable -.Ev BLOCKSIZE -is set, and the -.Gl k -option is not specified, the block counts will be displayed in units of that -size block. -.El -.\".Sh BUGS -.Sh SEE ALSO -.Xr df 1 , -.Xr quota 1 , -.Xr getmntinfo 3 , -.Xr fstab 5 , -.Xr mount 8 , diff --git a/usr.sbin/quot/quot.c b/usr.sbin/quot/quot.c deleted file mode 100644 index e5f2daad68c7e..0000000000000 --- a/usr.sbin/quot/quot.c +++ /dev/null @@ -1,583 +0,0 @@ -/* - * Copyright (C) 1991, 1994 Wolfgang Solfrank. - * Copyright (C) 1991, 1994 TooLs GmbH. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *	This product includes software developed by TooLs GmbH. - * 4. The name of TooLs GmbH may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static char rcsid[] = "$Id: quot.c,v 1.6.4.1 1995/11/01 00:06:41 jtc Exp $"; -#endif /* not lint */ - -#include <sys/param.h> -#include <sys/mount.h> -#include <sys/time.h> -#include <ufs/ffs/fs.h> -#include <ufs/ufs/quota.h> -#include <ufs/ufs/inode.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> -#include <pwd.h> - -/* some flags of what to do: */ -static char estimate; -static char count; -static char unused; -static int (*func)(); -static long blocksize; -static char *header; -static int headerlen; - -/* - * Original BSD quot doesn't round to number of frags/blocks, - * doesn't account for indirection blocks and gets it totally - * wrong if the	size is a multiple of the blocksize. - * The new code always counts the number of 512 byte blocks - * instead of the number of kilobytes and converts them	to - * kByte when done (on request). - */ -#ifdef	COMPAT -#define	SIZE(n)	(n) -#else -#define	SIZE(n)	(((n) * 512 + blocksize - 1)/blocksize) -#endif - -#define	INOCNT(fs)	((fs)->fs_ipg) -#define	INOSZ(fs)	(sizeof(struct dinode) * INOCNT(fs)) - -static struct dinode *get_inode(fd,super,ino) -	struct fs *super; -	ino_t ino; -{ -	static struct dinode *ip; -	static ino_t last; -	 -	if (fd < 0) {		/* flush cache */ -		if (ip) { -			free(ip); -			ip = 0; -		} -		return 0; -	} -	 -	if (!ip || ino < last || ino >= last + INOCNT(super)) { -		if (!ip -		    && !(ip = (struct dinode *)malloc(INOSZ(super)))) { -			perror("allocate inodes"); -			exit(1); -		} -		last = (ino / INOCNT(super)) * INOCNT(super); -		if (lseek(fd,ino_to_fsba(super,last) << super->fs_fshift,0) < 0 -		    || read(fd,ip,INOSZ(super)) != INOSZ(super)) { -			perror("read inodes"); -			exit(1); -		} -	} -	 -	return ip + ino % INOCNT(super); -} - -#ifdef	COMPAT -#define	actualblocks(super,ip)	((ip)->di_blocks/2) -#else -#define	actualblocks(super,ip)	((ip)->di_blocks) -#endif - -static virtualblocks(super,ip) -	struct fs *super; -	struct dinode *ip; -{ -	register off_t nblk, sz; -	 -	sz = ip->di_size; -#ifdef	COMPAT -	if (lblkno(super,sz) >= NDADDR) { -		nblk = blkroundup(super,sz); -		if (sz == nblk) -			nblk += super->fs_bsize; -	} -	 -	return sz / 1024; -	 -#else	/* COMPAT */ -	 -	if (lblkno(super,sz) >= NDADDR) { -		nblk = blkroundup(super,sz); -		sz = lblkno(super,nblk); -		sz = (sz - NDADDR + NINDIR(super) - 1) / NINDIR(super); -		while (sz > 0) { -			nblk += sz * super->fs_bsize; -			/* sz - 1 rounded up */ -			sz = (sz - 1 + NINDIR(super) - 1) / NINDIR(super); -		} -	} else -		nblk = fragroundup(super,sz); -	 -	return nblk / 512; -#endif	/* COMPAT */ -} - -static isfree(ip) -	struct dinode *ip; -{ -#ifdef	COMPAT -	return (ip->di_mode&IFMT) == 0; -#else	/* COMPAT */ -	 -	switch (ip->di_mode&IFMT) { -	case IFIFO: -	case IFLNK:		/* should check FASTSYMLINK? */ -	case IFDIR: -	case IFREG: -		return 0; -	default: -		return 1; -	} -#endif -} - -static struct user { -	uid_t uid; -	char *name; -	daddr_t space; -	long count; -	daddr_t spc30; -	daddr_t spc60; -	daddr_t spc90; -} *users; -static int nusers; - -static inituser() -{ -	register i; -	register struct user *usr; -	 -	if (!nusers) { -		nusers = 8; -		if (!(users = -		    (struct user *)calloc(nusers,sizeof(struct user)))) { -			perror("allocate users"); -			exit(1); -		} -	} else { -		for (usr = users, i = nusers; --i >= 0; usr++) { -			usr->space = usr->spc30 = usr->spc60 = usr->spc90 = 0; -			usr->count = 0; -		} -	} -} - -static usrrehash() -{ -	register i; -	register struct user *usr, *usrn; -	struct user *svusr; -	 -	svusr = users; -	nusers <<= 1; -	if (!(users = (struct user *)calloc(nusers,sizeof(struct user)))) { -		perror("allocate users"); -		exit(1); -	} -	for (usr = svusr, i = nusers >> 1; --i >= 0; usr++) { -		for (usrn = users + (usr->uid&(nusers - 1)); usrn->name; -		    usrn--) { -			if (usrn <= users) -				usrn = users + nusers; -		} -		*usrn = *usr; -	} -} - -static struct user *user(uid) -	uid_t uid; -{ -	register struct user *usr; -	register i; -	struct passwd *pwd; -	 -	while (1) { -		for (usr = users + (uid&(nusers - 1)), i = nusers; --i >= 0; -		    usr--) { -			if (!usr->name) { -				usr->uid = uid; -				 -				if (!(pwd = getpwuid(uid))) { -					if (usr->name = (char *)malloc(7)) -						sprintf(usr->name,"#%d",uid); -				} else { -					if (usr->name = (char *) -					    malloc(strlen(pwd->pw_name) + 1)) -						strcpy(usr->name,pwd->pw_name); -				} -				if (!usr->name) { -					perror("allocate users"); -					exit(1); -				} -				 -				return usr; -				 -			} else if (usr->uid == uid) -				return usr; - -			if (usr <= users) -				usr = users + nusers; -		} -		usrrehash(); -	} -} - -static cmpusers(u1,u2) -	struct user *u1, *u2; -{ -	return u2->space - u1->space; -} - -#define	sortusers(users)	(qsort((users),nusers,sizeof(struct user), \ -				    cmpusers)) - -static uses(uid,blks,act) -	uid_t uid; -	daddr_t blks; -	time_t act; -{ -	static time_t today; -	register struct user *usr; -	 -	if (!today) -		time(&today); -	 -	usr = user(uid); -	usr->count++; -	usr->space += blks; -	 -	if (today - act > 90L * 24L * 60L * 60L) -		usr->spc90 += blks; -	if (today - act > 60L * 24L * 60L * 60L) -		usr->spc60 += blks; -	if (today - act > 30L * 24L * 60L * 60L) -		usr->spc30 += blks; -} - -#ifdef	COMPAT -#define	FSZCNT	500 -#else -#define	FSZCNT	512 -#endif -struct fsizes { -	struct fsizes *fsz_next; -	daddr_t fsz_first, fsz_last; -	ino_t fsz_count[FSZCNT]; -	daddr_t fsz_sz[FSZCNT]; -} *fsizes; - -static initfsizes() -{ -	register struct fsizes *fp; -	register i; -	 -	for (fp = fsizes; fp; fp = fp->fsz_next) { -		for (i = FSZCNT; --i >= 0;) { -			fp->fsz_count[i] = 0; -			fp->fsz_sz[i] = 0; -		} -	} -} - -static dofsizes(fd,super,name) -	struct fs *super; -	char *name; -{ -	ino_t inode, maxino; -	struct dinode *ip; -	daddr_t sz, ksz; -	struct fsizes *fp, **fsp; -	register i; -	 -	maxino = super->fs_ncg * super->fs_ipg - 1; -#ifdef	COMPAT -	if (!(fsizes = (struct fsizes *)malloc(sizeof(struct fsizes)))) { -		perror("alloc fsize structure"); -		exit(1); -	} -#endif	/* COMPAT */ -	for (inode = 0; inode < maxino; inode++) { -		errno = 0; -		if ((ip = get_inode(fd,super,inode)) -#ifdef	COMPAT -		    && ((ip->di_mode&IFMT) == IFREG -			|| (ip->di_mode&IFMT) == IFDIR) -#else	/* COMPAT */ -		    && !isfree(ip) -#endif	/* COMPAT */ -		    ) { -			sz = estimate ? virtualblocks(super,ip) : -			    actualblocks(super,ip); -#ifdef	COMPAT -			if (sz >= FSZCNT) { -				fsizes->fsz_count[FSZCNT-1]++; -				fsizes->fsz_sz[FSZCNT-1] += sz; -			} else { -				fsizes->fsz_count[sz]++; -				fsizes->fsz_sz[sz] += sz; -			} -#else	/* COMPAT */ -			ksz = SIZE(sz); -			for (fsp = &fsizes; fp = *fsp; fsp = &fp->fsz_next) { -				if (ksz < fp->fsz_last) -					break; -			} -			if (!fp || ksz < fp->fsz_first) { -				if (!(fp = (struct fsizes *) -				    malloc(sizeof(struct fsizes)))) { -					perror("alloc fsize structure"); -					exit(1); -				} -				fp->fsz_next = *fsp; -				*fsp = fp; -				fp->fsz_first = (ksz / FSZCNT) * FSZCNT; -				fp->fsz_last = fp->fsz_first + FSZCNT; -				for (i = FSZCNT; --i >= 0;) { -					fp->fsz_count[i] = 0; -					fp->fsz_sz[i] = 0; -				} -			} -			fp->fsz_count[ksz % FSZCNT]++; -			fp->fsz_sz[ksz % FSZCNT] += sz; -#endif	/* COMPAT */ -		} else if (errno) { -			perror(name); -			exit(1); -		} -	} -	sz = 0; -	for (fp = fsizes; fp; fp = fp->fsz_next) { -		for (i = 0; i < FSZCNT; i++) { -			if (fp->fsz_count[i]) -				printf("%d\t%d\t%d\n",fp->fsz_first + i, -				    fp->fsz_count[i], -				    SIZE(sz += fp->fsz_sz[i])); -		} -	} -} - -static douser(fd,super,name) -	struct fs *super; -	char *name; -{ -	ino_t inode, maxino; -	struct user *usr, *usrs; -	struct dinode *ip; -	register n; -	 -	maxino = super->fs_ncg * super->fs_ipg - 1; -	for (inode = 0; inode < maxino; inode++) { -		errno = 0; -		if ((ip = get_inode(fd,super,inode)) -		    && !isfree(ip)) -			uses(ip->di_uid, -			    estimate ? virtualblocks(super,ip) : -				actualblocks(super,ip), -			    ip->di_atime); -		else if (errno) { -			perror(name); -			exit(1); -		} -	} -	if (!(usrs = (struct user *)malloc(nusers * sizeof(struct user)))) { -		perror("allocate users"); -		exit(1); -	} -	bcopy(users,usrs,nusers * sizeof(struct user)); -	sortusers(usrs); -	for (usr = usrs, n = nusers; --n >= 0 && usr->count; usr++) { -		printf("%5d",SIZE(usr->space)); -		if (count) -			printf("\t%5d",usr->count); -		printf("\t%-8s",usr->name); -		if (unused) -			printf("\t%5d\t%5d\t%5d", -			       SIZE(usr->spc30), -			       SIZE(usr->spc60), -			       SIZE(usr->spc90)); -		printf("\n"); -	} -	free(usrs); -} - -static donames(fd,super,name) -	struct fs *super; -	char *name; -{ -	int c; -	ino_t inode, inode1; -	ino_t maxino; -	struct dinode *ip; -	 -	maxino = super->fs_ncg * super->fs_ipg - 1; -	/* first skip the name of the filesystem */ -	while ((c = getchar()) != EOF && (c < '0' || c > '9')) -		while ((c = getchar()) != EOF && c != '\n'); -	ungetc(c,stdin); -	inode1 = -1; -	while (scanf("%d",&inode) == 1) { -		if (inode < 0 || inode > maxino) { -			fprintf(stderr,"illegal inode %d\n",inode); -			return; -		} -		errno = 0; -		if ((ip = get_inode(fd,super,inode)) -		    && !isfree(ip)) { -			printf("%s\t",user(ip->di_uid)->name); -			/* now skip whitespace */ -			while ((c = getchar()) == ' ' || c == '\t'); -			/* and print out the remainder of the input line */ -			while (c != EOF && c != '\n') { -				putchar(c); -				c = getchar(); -			} -			putchar('\n'); -			inode1 = inode; -		} else { -			if (errno) { -				perror(name); -				exit(1); -			} -			/* skip this line */ -			while ((c = getchar()) != EOF && c != '\n'); -		} -		if (c == EOF) -			break; -	} -} - -static usage() -{ -#ifdef	COMPAT -	fprintf(stderr,"Usage: quot [-nfcvha] [filesystem ...]\n"); -#else	/* COMPAT */ -	fprintf(stderr,"Usage: quot [ -acfhknv ] [ filesystem ... ]\n"); -#endif	/* COMPAT */ -	exit(1); -} - -static char superblock[SBSIZE]; - -quot(name,mp) -	char *name, *mp; -{ -	int fd; -	 -	get_inode(-1);		/* flush cache */ -	inituser(); -	initfsizes(); -	if ((fd = open(name,0)) < 0 -	    || lseek(fd,SBOFF,0) != SBOFF -	    || read(fd,superblock,SBSIZE) != SBSIZE) { -		perror(name); -		close(fd); -		return; -	} -	if (((struct fs *)superblock)->fs_magic != FS_MAGIC) { -		fprintf(stderr,"%s: not a BSD filesystem\n",name); -		close(fd); -		return; -	} -	printf("%s:",name); -	if (mp) -		printf(" (%s)",mp); -	putchar('\n'); -	(*func)(fd,superblock,name); -	close(fd); -} - -int main(argc,argv) -	char **argv; -{ -	int fd; -	char all = 0; -	FILE *fp; -	struct statfs *mp; -	char dev[MNAMELEN + 1]; -	char *nm; -	int cnt; -	 -	func = douser; -#ifndef	COMPAT -	header = getbsize(&headerlen,&blocksize); -#endif -	while (--argc > 0 && **++argv == '-') { -		while (*++*argv) { -			switch (**argv) { -			case 'n': -				func = donames; -				break; -			case 'c': -				func = dofsizes; -				break; -			case 'a': -				all = 1; -				break; -			case 'f': -				count = 1; -				break; -			case 'h': -				estimate = 1; -				break; -#ifndef	COMPAT -			case 'k': -				blocksize = 1024; -				break; -#endif	/* COMPAT */ -			case 'v': -				unused = 1; -				break; -			default: -				usage(); -			} -		} -	} -	if (all) { -		cnt = getmntinfo(&mp,MNT_NOWAIT); -		for (; --cnt >= 0; mp++) { -			if (!strncmp(mp->f_fstypename, MOUNT_FFS, MFSNAMELEN)) { -				if (nm = strrchr(mp->f_mntfromname,'/')) { -					sprintf(dev,"/dev/r%s",nm + 1); -					nm = dev; -				} else -					nm = mp->f_mntfromname; -				quot(nm,mp->f_mntonname); -			} -		} -	} -	while (--argc >= 0) -		quot(*argv++,0); -	return 0; -} diff --git a/usr.sbin/sa/Makefile b/usr.sbin/sa/Makefile deleted file mode 100644 index ee412a6e6c7d5..0000000000000 --- a/usr.sbin/sa/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -#	$Id: Makefile,v 1.1 1994/03/24 18:41:48 cgd Exp $ - -PROG=	sa -MAN8=	sa.0 -SRCS=	main.c pdb.c usrdb.c - -.include <bsd.prog.mk> diff --git a/usr.sbin/sa/extern.h b/usr.sbin/sa/extern.h deleted file mode 100644 index 6d5291458d9df..0000000000000 --- a/usr.sbin/sa/extern.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 1994 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - *	$Id: extern.h,v 1.1 1994/03/24 18:41:50 cgd Exp $ - */ - -#include <sys/types.h> -#include <sys/param.h> -#include <db.h> - -/* structures */ - -struct cmdinfo { -	char		ci_comm[MAXCOMLEN+2];	/* command name (+ '*') */ -	u_long		ci_uid;			/* user id */ -	u_quad_t	ci_calls;		/* number of calls */ -	u_quad_t	ci_etime;		/* elapsed time */ -	u_quad_t	ci_utime;		/* user time */ -	u_quad_t	ci_stime;		/* system time */ -	u_quad_t	ci_mem;			/* memory use */ -	u_quad_t	ci_io;			/* number of disk i/o ops */ -	u_int		ci_flags;		/* flags; see below */ -}; -#define	CI_UNPRINTABLE	0x0001			/* unprintable chars in name */ - -struct userinfo { -	u_long		ui_uid;			/* user id; for consistency */ -	u_quad_t	ui_calls;		/* number of invocations */ -	u_quad_t	ui_utime;		/* user time */ -	u_quad_t	ui_stime;		/* system time */ -	u_quad_t	ui_mem;			/* memory use */ -	u_quad_t	ui_io;			/* number of disk i/o ops */ -}; - -/* typedefs */ - -typedef	int (*cmpf_t) __P((const DBT *, const DBT *)); - -/* external functions in sa.c */ -int	main		__P((int, char **)); - -/* external functions in pdb.c */ -int	pacct_init	__P((void)); -void	pacct_destroy	__P((void)); -int	pacct_add	__P((const struct cmdinfo *)); -int	pacct_update	__P((void)); -void	pacct_print	__P((void)); - -/* external functions in usrdb.c */ -int	usracct_init	__P((void)); -void	usracct_destroy	__P((void)); -int	usracct_add	__P((const struct cmdinfo *)); -int	usracct_update	__P((void)); -void	usracct_print	__P((void)); - -/* variables */ - -extern int	aflag, bflag, cflag, dflag, Dflag, fflag, iflag, jflag, kflag; -extern int	Kflag, lflag, mflag, qflag, rflag, sflag, tflag, uflag, vflag; -extern int	cutoff; -extern cmpf_t	sa_cmp; - -/* some #defines to help with db's stupidity */ - -#define	DB_CLOSE(db) \ -	((*(db)->close)(db)) -#define	DB_GET(db, key, data, flags) \ -	((*(db)->get)((db), (key), (data), (flags))) -#define	DB_PUT(db, key, data, flags) \ -	((*(db)->put)((db), (key), (data), (flags))) -#define	DB_SYNC(db, flags) \ -	((*(db)->sync)((db), (flags))) -#define	DB_SEQ(db, key, data, flags) \ -	((*(db)->seq)((db), (key), (data), (flags))) diff --git a/usr.sbin/sa/main.c b/usr.sbin/sa/main.c deleted file mode 100644 index dac27240c4f5d..0000000000000 --- a/usr.sbin/sa/main.c +++ /dev/null @@ -1,542 +0,0 @@ -/* - * Copyright (c) 1994 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef LINT -static char copright[] =  -"@(#) Copyright (c) 1994 Christopher G. Demetriou\n\ - All rights reserved.\n"; - -static char rcsid[] = "$Id: main.c,v 1.1 1994/03/24 18:41:51 cgd Exp $"; -#endif - -/* - * sa:	system accounting - */ - -#include <sys/types.h> -#include <sys/acct.h> -#include <ctype.h> -#include <err.h> -#include <fcntl.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include "extern.h" -#include "pathnames.h" - -static int	acct_load	__P((char *, int)); -static u_quad_t	decode_comp_t	__P((comp_t)); -static int	cmp_comm	__P((const char *, const char *)); -static int	cmp_usrsys	__P((const DBT *, const DBT *)); -static int	cmp_avgusrsys	__P((const DBT *, const DBT *)); -static int	cmp_dkio	__P((const DBT *, const DBT *)); -static int	cmp_avgdkio	__P((const DBT *, const DBT *)); -static int	cmp_cpumem	__P((const DBT *, const DBT *)); -static int	cmp_avgcpumem	__P((const DBT *, const DBT *)); -static int	cmp_calls	__P((const DBT *, const DBT *)); - -int aflag, bflag, cflag, dflag, Dflag, fflag, iflag, jflag, kflag; -int Kflag, lflag, mflag, qflag, rflag, sflag, tflag, uflag, vflag; -int cutoff = 1; - -static char	*dfltargv[] = { _PATH_ACCT }; -static int	dfltargc = (sizeof dfltargv/sizeof(char *)); - -/* default to comparing by sum of user + system time */ -cmpf_t   sa_cmp = cmp_usrsys; - -int -main(argc, argv) -	int argc; -	char **argv; -{ -	char ch; -	int error; - -	while ((ch = getopt(argc, argv, "abcdDfijkKlmnqrstuv:")) != -1) -		switch (ch) { -			case 'a': -				/* print all commands */ -				aflag = 1; -				break; -			case 'b': -				/* sort by per-call user/system time average */ -				bflag = 1; -				sa_cmp = cmp_avgusrsys; -				break; -			case 'c': -				/* print percentage total time */ -				cflag = 1; -				break; -			case 'd': -				/* sort by averge number of disk I/O ops */ -				dflag = 1; -				sa_cmp = cmp_avgdkio; -				break; -			case 'D': -				/* print and sort by total disk I/O ops */ -				Dflag = 1; -				sa_cmp = cmp_dkio; -				break; -			case 'f': -				/* force no interactive threshold comprison */ -				fflag = 1; -				break; -			case 'i': -				/* do not read in summary file */ -				iflag = 1; -				break; -			case 'j': -				/* instead of total minutes, give sec/call */ -				jflag = 1; -				break; -			case 'k': -				/* sort by cpu-time average memory usage */ -				kflag = 1; -				sa_cmp = cmp_avgcpumem; -				break; -			case 'K': -				/* print and sort by cpu-storage integral */ -				sa_cmp = cmp_cpumem; -				Kflag = 1; -				break; -			case 'l': -				/* seperate system and user time */ -				lflag = 1; -				break; -			case 'm': -				/* print procs and time per-user */ -				mflag = 1; -				break; -			case 'n': -				/* sort by number of calls */ -				sa_cmp = cmp_calls; -				break; -			case 'q': -				/* quiet; error messages only */ -				qflag = 1; -				break; -			case 'r': -				/* reverse order of sort */ -				rflag = 1; -				break; -			case 's': -				/* merge accounting file into summaries */ -				sflag = 1; -				break; -			case 't': -				/* report ratio of user and system times */ -				tflag = 1; -				break; -			case 'u': -				/* first, print uid and command name */ -				uflag = 1; -				break; -			case 'v': -				/* cull junk */ -				vflag = 1; -				cutoff = atoi(optarg); -				break; -			case '?': -	                default: -				(void)fprintf(stderr,    -				    "usage: sa [-abcdDfijkKlmnqrstu] [-v cutoff] [file ...]\n"); -				exit(1); -		} - -	argc -= optind; -	argv += optind; - -	/* various argument checking */ -	if (fflag && !vflag) -		errx(1, "only one of -f requires -v"); -	if (fflag && aflag) -		errx(1, "only one of -a and -v may be specified"); -	/* XXX need more argument checking */ - -	if (!uflag) { -		/* initialize tables */ -		if ((sflag || (!mflag && !qflag)) && pacct_init() != 0) -			errx(1, "process accounting initialization failed"); -		if ((sflag || (mflag && !qflag)) && usracct_init() != 0) -			errx(1, "user accounting initialization failed"); -	} - -	if (argc == 0) { -		argc = dfltargc; -		argv = dfltargv; -	} - -	/* for each file specified */ -	for (; argc > 0; argc--, argv++) { -		int	fd; - -		/* -		 * load the accounting data from the file. -		 * if it fails, go on to the next file. -		 */ -		fd = acct_load(argv[0], sflag); -		if (fd < 0) -			continue; - -		if (!uflag && sflag) { -#ifndef DEBUG -			sigset_t nmask, omask; -			int unmask = 1; - -			/* -			 * block most signals so we aren't interrupted during -			 * the update. -			 */ -			if (sigfillset(&nmask) == -1) { -				warn("sigfillset"); -				unmask = 0; -				error = 1; -			} -			if (unmask &&  -			    (sigprocmask(SIG_BLOCK, &nmask, &omask) == -1)) { -				warn("couldn't set signal mask "); -				unmask = 0; -				error = 1; -			} -#endif /* DEBUG */ - -			/* -			 * truncate the accounting data file ASAP, to avoid -			 * losing data.  don't worry about errors in updating -			 * the saved stats; better to underbill than overbill, -			 * but we want every accounting record intact. -			 */ -			if (ftruncate(fd, 0) == -1) { -				warn("couldn't truncate %s", argv); -				error = 1; -			} - -			/* -			 * update saved user and process accounting data. -			 * note errors for later. -			 */ -			if (pacct_update() != 0 || usracct_update() != 0) -				error = 1; - -#ifndef DEBUG -			/* -			 * restore signals -			 */ -			if (unmask && -			    (sigprocmask(SIG_SETMASK, &omask, NULL) == -1)) { -				warn("couldn't restore signal mask"); -				error = 1; -			} -#endif /* DEBUG */ -		} - -		/* -		 * close the opened accounting file -		 */ -		if (close(fd) == -1) { -			warn("close %s", argv); -			error = 1; -		} -	} - -	if (!uflag && !qflag) { -		/* print any results we may have obtained. */ -		if (!mflag) -			pacct_print(); -		else -			usracct_print(); -	} - -	if (!uflag) { -		/* finally, deallocate databases */ -		if (sflag || (!mflag && !qflag)) -			pacct_destroy(); -		if (sflag || (mflag && !qflag)) -			usracct_destroy(); -	} - -	exit(error); -} - -static int -acct_load(pn, wr) -	char *pn; -	int wr; -{ -	struct acct ac; -	struct cmdinfo ci; -	ssize_t rv; -	int fd, i; - -	/* -	 * open the file -	 */ -	fd = open(pn, wr ? O_RDWR : O_RDONLY, 0); -	if (fd == -1) { -		warn("open %s %s", pn, wr ? "for read/write" : "read-only"); -		return (-1); -	} - -	/* -	 * read all we can; don't stat and open because more processes -	 * could exit, and we'd miss them -	 */ -	while (1) { -		/* get one accounting entry and punt if there's an error */ -		rv = read(fd, &ac, sizeof(struct acct)); -		if (rv == -1) -			warn("error reading %s", pn); -		else if (rv > 0 && rv < sizeof(struct acct)) -			warnx("short read of accounting data in %s", pn); -		if (rv != sizeof(struct acct)) -			break; - -		/* decode it */ -		ci.ci_calls = 1; -		for (i = 0; i < sizeof ac.ac_comm && ac.ac_comm[i] != '\0'; -		    i++) { -			char c = ac.ac_comm[i]; - -			if (!isascii(c) || iscntrl(c)) { -				ci.ci_comm[i] = '?'; -				ci.ci_flags |= CI_UNPRINTABLE; -			} else -				ci.ci_comm[i] = c; -		} -		if (ac.ac_flag & AFORK) -			ci.ci_comm[i++] = '*'; -		ci.ci_comm[i++] = '\0'; -		ci.ci_etime = decode_comp_t(ac.ac_etime); -		ci.ci_utime = decode_comp_t(ac.ac_utime); -		ci.ci_stime = decode_comp_t(ac.ac_stime); -		ci.ci_uid = ac.ac_uid; -		ci.ci_mem = ac.ac_mem; -		ci.ci_io = decode_comp_t(ac.ac_io) / AHZ; - -		if (!uflag) { -			/* and enter it into the usracct and pacct databases */ -			if (sflag || (!mflag && !qflag)) -				pacct_add(&ci); -			if (sflag || (mflag && !qflag)) -				usracct_add(&ci); -		} else if (!qflag) -			printf("%6u %12.2lf cpu %12quk mem %12qu io %s\n", -			    ci.ci_uid, -			    (ci.ci_utime + ci.ci_stime) / (double) AHZ, -			    ci.ci_mem, ci.ci_io, ci.ci_comm); -	} - -	/* finally, return the file descriptor for possible truncation */ -	return (fd); -} - -static u_quad_t -decode_comp_t(comp) -	comp_t comp; -{ -	u_quad_t rv; - -	/* -	 * for more info on the comp_t format, see: -	 *	/usr/src/sys/kern/kern_acct.c -	 *	/usr/src/sys/sys/acct.h -	 *	/usr/src/usr.bin/lastcomm/lastcomm.c -	 */ -	rv = comp & 0x1fff;	/* 13 bit fraction */ -	comp >>= 13;		/* 3 bit base-8 exponent */ -	while (comp--) -		rv <<= 3; - -	return (rv); -} - -/* sort commands, doing the right thing in terms of reversals */ -static int -cmp_comm(s1, s2) -	const char *s1, *s2; -{ -	int rv; - -	rv = strcmp(s1, s2); -	if (rv == 0) -		rv = -1; -	return (rflag ? rv : -rv); -} - -/* sort by total user and system time */ -static int -cmp_usrsys(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; -	u_quad_t t1, t2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	t1 = c1->ci_utime + c1->ci_stime; -	t2 = c2->ci_utime + c2->ci_stime; - -	if (t1 < t2) -		return -1; -	else if (t1 == t2) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} - -/* sort by average user and system time */ -static int -cmp_avgusrsys(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; -	double t1, t2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	t1 = c1->ci_utime + c1->ci_stime; -	t1 /= (double) (c1->ci_calls ? c1->ci_calls : 1); - -	t2 = c2->ci_utime + c2->ci_stime; -	t2 /= (double) (c2->ci_calls ? c2->ci_calls : 1); - -	if (t1 < t2) -		return -1; -	else if (t1 == t2) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} - -/* sort by total number of disk I/O operations */ -static int -cmp_dkio(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	if (c1->ci_io < c2->ci_io) -		return -1; -	else if (c1->ci_io == c2->ci_io) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} - -/* sort by average number of disk I/O operations */ -static int -cmp_avgdkio(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; -	double n1, n2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	n1 = (double) c1->ci_io / (double) (c1->ci_calls ? c1->ci_calls : 1); -	n2 = (double) c2->ci_io / (double) (c2->ci_calls ? c2->ci_calls : 1); - -	if (n1 < n2) -		return -1; -	else if (n1 == n2) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} - -/* sort by the cpu-storage integral */ -static int -cmp_cpumem(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	if (c1->ci_mem < c2->ci_mem) -		return -1; -	else if (c1->ci_mem == c2->ci_mem) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} - -/* sort by the cpu-time average memory usage */ -static int -cmp_avgcpumem(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; -	u_quad_t t1, t2; -	double n1, n2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	t1 = c1->ci_utime + c1->ci_stime; -	t2 = c2->ci_utime + c2->ci_stime; - -	n1 = (double) c1->ci_mem / (double) (t1 ? t1 : 1); -	n2 = (double) c2->ci_mem / (double) (t2 ? t2 : 1); - -	if (n1 < n2) -		return -1; -	else if (n1 == n2) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} - -/* sort by the number of invocations */ -static int -cmp_calls(d1, d2) -	const DBT *d1, *d2; -{ -	struct cmdinfo *c1, *c2; - -	c1 = (struct cmdinfo *) d1->data; -	c2 = (struct cmdinfo *) d2->data; - -	if (c1->ci_calls < c2->ci_calls) -		return -1; -	else if (c1->ci_calls == c2->ci_calls) -		return (cmp_comm(c1->ci_comm, c2->ci_comm)); -	else -		return 1; -} diff --git a/usr.sbin/sa/pathnames.h b/usr.sbin/sa/pathnames.h deleted file mode 100644 index 31721c25fcd2d..0000000000000 --- a/usr.sbin/sa/pathnames.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 1994 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - *	$Id: pathnames.h,v 1.1 1994/03/24 18:41:53 cgd Exp $ - */ - -#define	_PATH_ACCT	"/var/account/acct" -#define _PATH_SAVACCT	"/var/account/savacct" -#define _PATH_USRACCT	"/var/account/usracct" diff --git a/usr.sbin/sa/pdb.c b/usr.sbin/sa/pdb.c deleted file mode 100644 index 083f9daa87da0..0000000000000 --- a/usr.sbin/sa/pdb.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright (c) 1994 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef LINT -static char rcsid[] = "$Id: pdb.c,v 1.1 1994/03/24 18:41:54 cgd Exp $"; -#endif - -#include <sys/types.h> -#include <sys/acct.h> -#include <err.h> -#include <errno.h> -#include <fcntl.h> -#include <stdio.h> -#include "extern.h" -#include "pathnames.h" - -static int check_junk __P((struct cmdinfo *)); -static void add_ci __P((const struct cmdinfo *, struct cmdinfo *)); -static void print_ci __P((const struct cmdinfo *, const struct cmdinfo *)); - -static DB	*pacct_db; - -int -pacct_init() -{ -	DB *saved_pacct_db; -	int error; - -	pacct_db = dbopen(NULL, O_RDWR, 0, DB_BTREE, NULL); -	if (pacct_db == NULL) -		return (-1); - -	error = 0; -	if (!iflag) { -		DBT key, data; -		int serr, nerr; - -		saved_pacct_db = dbopen(_PATH_SAVACCT, O_RDONLY, 0, DB_BTREE, -		    NULL); -		if (saved_pacct_db == NULL) { -			error = errno == ENOENT ? 0 : -1; -			if (error) -				warn("retrieving process accounting summary"); -			goto out; -		} - -		serr = DB_SEQ(saved_pacct_db, &key, &data, R_FIRST); -		if (serr < 0) { -			warn("retrieving process accounting summary"); -			error = -1; -			goto closeout; -		} -		while (serr == 0) { -			nerr = DB_PUT(pacct_db, &key, &data, 0); -			if (nerr < 0) { -				warn("initializing process accounting stats"); -				error = -1; -				break; -			} - -			serr = DB_SEQ(saved_pacct_db, &key, &data, R_NEXT); -			if (serr < 0) { -				warn("retrieving process accounting summary"); -				error = -1; -				break; -			} -		} - -closeout:	if (DB_CLOSE(saved_pacct_db) < 0) { -			warn("closing process accounting summary"); -			error = -1; -		} -	} - -out:	if (error != 0) -		pacct_destroy(); -	return (error); -} - -void -pacct_destroy() -{ -	if (DB_CLOSE(pacct_db) < 0) -		warn("destroying process accounting stats"); -} - -int -pacct_add(ci) -	const struct cmdinfo *ci; -{ -	DBT key, data; -	struct cmdinfo newci; -	char keydata[sizeof ci->ci_comm]; -	int rv; - -	bcopy(ci->ci_comm, &keydata, sizeof keydata); -	key.data = &keydata; -	key.size = strlen(keydata); - -	rv = DB_GET(pacct_db, &key, &data, 0); -	if (rv < 0) { -		warn("get key %s from process accounting stats", ci->ci_comm); -		return (-1); -	} else if (rv == 0) {	/* it's there; copy whole thing */ -		/* XXX compare size if paranoid */ -		/* add the old data to the new data */ -		bcopy(data.data, &newci, data.size); -	} else {		/* it's not there; zero it and copy the key */ -		bzero(&newci, sizeof newci); -		bcopy(key.data, newci.ci_comm, key.size); -	} -	 -	add_ci(ci, &newci); - -	data.data = &newci;  -	data.size = sizeof newci; -	rv = DB_PUT(pacct_db, &key, &data, 0); -	if (rv < 0) { -		warn("add key %s to process accounting stats", ci->ci_comm); -		return (-1); -	} else if (rv == 1) { -		warnx("duplicate key %s in process accounting stats", -		    ci->ci_comm); -		return (-1); -	} - -	return (0); -} - -int -pacct_update() -{ -	DB *saved_pacct_db; -	DBT key, data; -	int error, serr, nerr; - -	saved_pacct_db = dbopen(_PATH_SAVACCT, O_RDWR|O_CREAT|O_TRUNC, 0644, -	    DB_BTREE, NULL); -	if (saved_pacct_db == NULL) { -		warn("creating process accounting summary"); -		return (-1); -	} - -	error = 0; - -	serr = DB_SEQ(pacct_db, &key, &data, R_FIRST); -	if (serr < 0) { -		warn("retrieving process accounting stats"); -		error = -1; -	} -	while (serr == 0) { -		nerr = DB_PUT(saved_pacct_db, &key, &data, 0); -		if (nerr < 0) { -			warn("saving process accounting summary"); -			error = -1; -			break; -		} - -		serr = DB_SEQ(pacct_db, &key, &data, R_NEXT); -		if (serr < 0) { -			warn("retrieving process accounting stats"); -			error = -1; -			break; -		} -	} - -	if (DB_SYNC(saved_pacct_db, 0) < 0) { -		warn("syncing process accounting summary"); -		error = -1; -	} -	if (DB_CLOSE(saved_pacct_db) < 0) { -		warn("closing process accounting summary"); -		error = -1; -	} -	return error; -} - -void -pacct_print() -{ -	BTREEINFO bti; -	DBT key, data, ndata; -	DB *output_pacct_db; -	struct cmdinfo *cip, ci, ci_total, ci_other, ci_junk; -	int rv; - -	bzero(&ci_total, sizeof ci_total); -	strcpy(ci_total.ci_comm, ""); -	bzero(&ci_other, sizeof ci_other); -	strcpy(ci_other.ci_comm, "***other"); -	bzero(&ci_junk, sizeof ci_junk); -	strcpy(ci_junk.ci_comm, "**junk**"); - -	/* -	 * Retrieve them into new DB, sorted by appropriate key. -	 * At the same time, cull 'other' and 'junk' -	 */ -	bzero(&bti, sizeof bti); -	bti.compare = sa_cmp; -	output_pacct_db = dbopen(NULL, O_RDWR, 0, DB_BTREE, &bti); -	if (output_pacct_db == NULL) { -		warn("couldn't sort process accounting stats"); -		return; -	} - -	ndata.data = NULL; -	ndata.size = 0; -	rv = DB_SEQ(pacct_db, &key, &data, R_FIRST); -	if (rv < 0) -		warn("retrieving process accounting stats"); -	while (rv == 0) { -		cip = (struct cmdinfo *) data.data; -		bcopy(cip, &ci, sizeof ci); - -		/* add to total */ -		add_ci(&ci, &ci_total); - -		if (vflag && ci.ci_calls <= cutoff && -		    (fflag || check_junk(&ci))) { -			/* put it into **junk** */ -			add_ci(&ci, &ci_junk); -			goto next; -		} -		if (!aflag && -		    ((ci.ci_flags & CI_UNPRINTABLE) != 0 || ci.ci_calls <= 1)) { -			/* put into ***other */ -			add_ci(&ci, &ci_other); -			goto next; -		} -		rv = DB_PUT(output_pacct_db, &data, &ndata, 0); -		if (rv < 0) -			warn("sorting process accounting stats"); - -next:		rv = DB_SEQ(pacct_db, &key, &data, R_NEXT); -		if (rv < 0) -			warn("retrieving process accounting stats"); -	} - -	/* insert **junk** and ***other */ -	if (ci_junk.ci_calls != 0) { -		data.data = &ci_junk; -		data.size = sizeof ci_junk; -		rv = DB_PUT(output_pacct_db, &data, &ndata, 0); -		if (rv < 0) -			warn("sorting process accounting stats"); -	} -	if (ci_other.ci_calls != 0) { -		data.data = &ci_other; -		data.size = sizeof ci_other; -		rv = DB_PUT(output_pacct_db, &data, &ndata, 0); -		if (rv < 0) -			warn("sorting process accounting stats"); -	} - -	/* print out the total */ -	print_ci(&ci_total, &ci_total); - -	/* print out; if reversed, print first (smallest) first */ -	rv = DB_SEQ(output_pacct_db, &data, &ndata, rflag ? R_FIRST : R_LAST); -	if (rv < 0) -		warn("retrieving process accounting report"); -	while (rv == 0) { -		cip = (struct cmdinfo *) data.data; -		bcopy(cip, &ci, sizeof ci); - -		print_ci(&ci, &ci_total); - -		rv = DB_SEQ(output_pacct_db, &data, &ndata, -		    rflag ? R_NEXT : R_PREV); -		if (rv < 0) -			warn("retrieving process accounting report"); -	} -	DB_CLOSE(output_pacct_db); -} - -static int -check_junk(cip) -	struct cmdinfo *cip; -{ -	char *cp; -	size_t len; - -	fprintf(stderr, "%s (%qu) -- ", cip->ci_comm, cip->ci_calls); -	cp = fgetln(stdin, &len); - -	return (cp && (cp[0] == 'y' || cp[0] == 'Y')) ? 1 : 0; -} - -static void -add_ci(fromcip, tocip) -	const struct cmdinfo *fromcip; -	struct cmdinfo *tocip; -{ -	tocip->ci_calls += fromcip->ci_calls; -	tocip->ci_etime += fromcip->ci_etime; -	tocip->ci_utime += fromcip->ci_utime; -	tocip->ci_stime += fromcip->ci_stime; -	tocip->ci_mem += fromcip->ci_mem; -	tocip->ci_io += fromcip->ci_io; -} - -static void -print_ci(cip, totalcip) -	const struct cmdinfo *cip, *totalcip; -{ -	double t, c; -	int uflow; - -	c = cip->ci_calls ? cip->ci_calls : 1; -	t = (cip->ci_utime + cip->ci_stime) / (double) AHZ; -	if (t < 0.01) { -		t = 0.01; -		uflow = 1; -	} else -		uflow = 0; - -	printf("%8qu ", cip->ci_calls); -	if (cflag) { -		if (cip != totalcip) -			printf(" %4.2f%%  ", -			    cip->ci_calls / (double) totalcip->ci_calls); -		else -			printf(" %4s   ", ""); -	} - -	if (jflag) -		printf("%11.2fre ", cip->ci_etime / (double) (AHZ * c)); -	else -		printf("%11.2fre ", cip->ci_etime / (60.0 * AHZ)); -	if (cflag) { -		if (cip != totalcip) -			printf(" %4.2f%%  ", -			    cip->ci_etime / (double) totalcip->ci_etime); -		else -			printf(" %4s   ", ""); -	} - -	if (!lflag) { -		if (jflag) -			printf("%11.2fcp ", t / (double) cip->ci_calls); -		else -			printf("%11.2fcp ", t / 60.0); -		if (cflag) { -			if (cip != totalcip) -				printf(" %4.2f%%  ", -				    (cip->ci_utime + cip->ci_stime) / (double) -				    (totalcip->ci_utime + totalcip->ci_stime)); -			else -				printf(" %4s   ", ""); -		} -	} else { -		if (jflag) -			printf("%11.2fu ", cip->ci_utime / (double) (AHZ * c)); -		else -			printf("%11.2fu ", cip->ci_utime / (60.0 * AHZ)); -		if (cflag) { -			if (cip != totalcip) -				printf(" %4.2f%%  ", cip->ci_utime / (double) totalcip->ci_utime); -			else -				printf(" %4s   ", ""); -		} -		if (jflag) -			printf("%11.2fs ", cip->ci_stime / (double) (AHZ * c)); -		else -			printf("%11.2fs ", cip->ci_stime / (60.0 * AHZ)); -		if (cflag) { -			if (cip != totalcip) -				printf(" %4.2f%%  ", cip->ci_stime / (double) totalcip->ci_stime); -			else -				printf(" %4s   ", ""); -		} -	} - -	if (tflag) -		if (!uflow) -			printf("%8.2fre/cp ", cip->ci_etime / (double) (cip->ci_utime + cip->ci_stime)); -		else -			printf("%8 ", "*ignore*"); - -	if (Dflag) -		printf("%10qutio ", cip->ci_io); -	else -		printf("%8.0favio ", cip->ci_io / c); - -	if (Kflag) -		printf("%10quk*sec ", cip->ci_mem); -	else -		printf("%8.0fk ", cip->ci_mem / t); - -	printf("  %s\n", cip->ci_comm); -} diff --git a/usr.sbin/sa/sa.8 b/usr.sbin/sa/sa.8 deleted file mode 100644 index 83ec1f4aacbfb..0000000000000 --- a/usr.sbin/sa/sa.8 +++ /dev/null @@ -1,246 +0,0 @@ -.\" -.\" Copyright (c) 1994 Christopher G. Demetriou -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\"    notice, this list of conditions and the following disclaimer in the -.\"    documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\"    must display the following acknowledgement: -.\"      This product includes software developed by Christopher G. Demetriou. -.\" 3. The name of the author may not be used to endorse or promote products -.\"    derived from this software without specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\"	$Id: sa.8,v 1.1 1994/03/24 18:41:59 cgd Exp $ -.\" -.Dd February 25, 1994 -.Dt SA 8 -.Os NetBSD 0.9a -.Sh NAME -.Nm sa -.Nd print system accounting statistics -.Sh SYNOPSIS -.Nm sa -.Op Fl abcdDfijkKlmnqrstu -.Op Fl v Ar cutoff -.Op Ar -.Sh DESCRIPTION -The -.Nm sa -utility reports on, cleans up, -and generally maintains system -accounting files. -.Pp -.Nm Sa -is able to condense the the information in -.Pa /var/account/acct -into the summary files -.Pa /var/account/savacct -and -.Pa /var/account/usracct , -which contain system statistics according -to command name and login id, respectively. -This condensation is desirable because on a -large system, -.Pa /var/account/acct -can grow by hundreds of blocks per day. -The summary files are normally read before -the accounting file, so that reports include -all available information. -.Pp -If file names are supplied, they are read instead of -.Pa /var/account/account . -After each file is read, if the summary -files are being updated, an updated summary will -be saved to disk.  Only one report is printed, -after the last file is processed. -.Pp -The labels used in the output indicate the following, except -where otherwise specified by individual options: -.Bl -tag -width k*sec -.It Dv avio -Average number of I/O operations per execution -.It Dv cp -Sum of user and system time, in minutes -.It Dv cpu -Same as -.Dv cp  -.It Dv k -CPU-time averaged core usage, in 1k units -.It Dv k*sec -CPU storage integral, in 1k-core seconds -.It Dv re -Real time, in minutes -.It Dv s -System time, in minutes -.It Dv tio -Total number of I/O operations -.It Dv u -User time, in minutes -.El -.Pp -The options to -.Nm sa -are: -.Bl -tag -width Ds -.It Fl a -List all command names, including those containing unprintable -characters and those used only once.  By default, -.Nm sa -places all names containing unprintable characters and -those used only once under the name ``***other''. -.It Fl b -If printing command statistics, sort output by the sum of user and system -time divided by number of calls. -.It Fl c -In addition to the number of calls and the user, system and real times  -for each command, print their percentage of the total over all commands. -.It Fl d -If printing command statistics, sort by the average number of disk -I/O operations.  If printing user statistics, print the average number of -disk I/O operations per user. -.It Fl D -If printing command statistics, sort and print by the total number -of disk I/O operations. -.It Fl f -Force no interactive threshold comparison with the -.Fl v -option. -.It Fl i -Do not read in the summary files. -.It Fl j -Instead of the total minutes per category, give seconds per call. -.It Fl k -If printing command statistics, sort by the cpu-time average memory -usage.  If printing user statistics, print the cpu-time average -memory usage. -.It Fl K -If printing command statistics, print and sort by the cpu-storage integral. -.It Fl l -Separate system and user time; normally they are combined. -.It Fl m -Print per-user statistics rather than per-command statistics. -.It Fl n -Sort by number of calls. -.It Fl q -Create no output other than error messages. -.It Fl r -Reverse order of sort. -.It Fl s -Truncate the accounting files when done and merge their data -into the summary files. -.It Fl t -For each command, report the ratio of real time to the sum -of user and system cpu times. -If the cpu time is too small to report, ``*ignore*'' appears in -this field. -.It Fl u -Superseding all other flags, for each entry -in the accounting file, print the user ID, total seconds of cpu usage, -total memory usage, number of I/O operations performed, and -command name. -.It Fl v Ar cutoff -For each command used -.Ar cutoff -times or fewer, print the command name and await a reply -from the terminal.  If the reply begins with ``y'', add -the command to the category ``**junk**''.  This flag is -used to strip garbage from the report. -.El -.Pp -By default, per-command statistics will be printed.  The number of -calls, the total elapsed time in minutes, total cpu and user time -in minutes, average number of I/O operations, and CPU-time -averaged core usage will be printed.  If the -.Fl m -option is specified, per-user statistics will be printed, including -the user name, the number of commands invoked, total cpu time used -(in minutes), total number of I/O operations, and CPU storage integral -for each user.  If the -.Fl u -option is specified, the uid, user and system time (in seconds), -CPU storage integral, I/O usage, and command name will be printed -for each entry in the accounting data file. -.Pp -If the -.Fl u -flag is specified, all flags other than -.Fl q -are ignored.  If the -.Fl m -flag is specified, only the -.Fl b , -.Fl d , -.Fl i , -.Fl k , -.Fl q , -and -.Fl s  -flags are honored. -.Pp -The -.Nm sa -utility exits 0 on success, and >0 if an error occurs. -.Sh FILES -.Bl -tag -width /var/account/usracct -compact -.It Pa /var/account/acct -raw accounting data file -.It Pa /var/account/savacct -per-command accounting summary database -.It Pa /var/account/usracct -per-user accounting summary database -.El -.Sh SEE ALSO -.Xr ac 8 , -.Xr acct 5 , -.Xr accton 8 , -.Xr lastcomm 1 -.Sh BUGS -The number of options to this program is absurd, especially considering -that there's not much logic behind their lettering. -.Pp -The field labels should be more consistent. -.Pp -NetBSD's VM system does not record the CPU storage integral. -.Sh CAVEATS -While the behavior of the options in this version of -.Nm sa -was modeled after the original version, there are some intentional -differences and undoubtedly some unintentional ones as well.  In -particular, the -.Fl q -option has been added, and the -.Fl m -option now understands more options than it used to. -.Pp -The formats of the summary files created by this version of -.Nm sa -are very different than the those used by the original version. -This is not considered a problem, however, because the accounting record -format has changed as well (since user ids are now 32 bits). -.Sh HISTORY -.Nm Sa -was written for -.Nx 0.9a -from the specification provided by various systems' manual pages. -Its date of origin is unknown to the author. -.Sh AUTHOR -.Bl -tag -Chris G. Demetriou, cgd@postgres.berkeley.edu -.El diff --git a/usr.sbin/sa/usrdb.c b/usr.sbin/sa/usrdb.c deleted file mode 100644 index af7d0fdbad403..0000000000000 --- a/usr.sbin/sa/usrdb.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (c) 1994 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef LINT -static char rcsid[] = "$Id: usrdb.c,v 1.1 1994/03/24 18:42:01 cgd Exp $"; -#endif - -#include <sys/types.h> -#include <sys/acct.h> -#include <err.h> -#include <errno.h> -#include <fcntl.h> -#include "extern.h" -#include "pathnames.h" - -static int uid_compare __P((const DBT *, const DBT *)); - -static DB	*usracct_db; - -int -usracct_init() -{ -	DB *saved_usracct_db; -	BTREEINFO bti; -	int error; - -	bzero(&bti, sizeof bti); -	bti.compare = uid_compare; - -	usracct_db = dbopen(NULL, O_RDWR, 0, DB_BTREE, &bti); -	if (usracct_db == NULL) -		return (-1); - -	error = 0; -	if (!iflag) { -		DBT key, data; -		int serr, nerr; - -		saved_usracct_db = dbopen(_PATH_USRACCT, O_RDONLY, 0, DB_BTREE, -		    &bti); -		if (saved_usracct_db == NULL) { -			error = (errno == ENOENT) ? 0 : -1; -			if (error) -				warn("retrieving user accounting summary"); -			goto out; -		} - -		serr = DB_SEQ(saved_usracct_db, &key, &data, R_FIRST); -		if (serr < 0) { -			warn("retrieving user accounting summary"); -			error = -1; -			goto closeout; -		} -		while (serr == 0) { -			nerr = DB_PUT(usracct_db, &key, &data, 0); -			if (nerr < 0) { -				warn("initializing user accounting stats"); -				error = -1; -				break; -			}  - -			serr = DB_SEQ(saved_usracct_db, &key, &data, R_NEXT); -			if (serr < 0) { -				warn("retrieving user accounting summary"); -				error = -1; -				break; -			} -		} - -closeout: -		if (DB_CLOSE(saved_usracct_db) < 0) { -			warn("closing user accounting summary"); -			error = -1; -		} -	} - -out: -	if (error != 0) -		usracct_destroy(); -	return (error); -} - -void -usracct_destroy() -{ -	if (DB_CLOSE(usracct_db) < 0) -		warn("destroying user accounting stats"); -} - -int -usracct_add(ci) -	const struct cmdinfo *ci; -{ -	DBT key, data; -	struct userinfo newui; -	u_long uid; -	int rv; - -	uid = ci->ci_uid; -	key.data = &uid; -	key.size = sizeof uid; - -	rv = DB_GET(usracct_db, &key, &data, 0); -	if (rv < 0) { -		warn("get key %d from user accounting stats", uid); -		return (-1); -	} else if (rv == 0) {	/* it's there; copy whole thing */ -		/* add the old data to the new data */ -		bcopy(data.data, &newui, data.size); -		if (newui.ui_uid != uid) { -			warnx("key %d != expected record number %d", -			    newui.ui_uid, uid); -			warnx("inconsistent user accounting stats"); -			return (-1); -		} -	} else {		/* it's not there; zero it and copy the key */ -		bzero(&newui, sizeof newui); -		newui.ui_uid = ci->ci_uid; -	} - -	newui.ui_calls += ci->ci_calls; -	newui.ui_utime += ci->ci_utime; -	newui.ui_stime += ci->ci_stime; -	newui.ui_mem += ci->ci_mem; -	newui.ui_io += ci->ci_io; - -	data.data = &newui;  -	data.size = sizeof newui; -	rv = DB_PUT(usracct_db, &key, &data, 0); -	if (rv < 0) { -		warn("add key %d to user accounting stats", uid); -		return (-1); -	} else if (rv != 0) { -		warnx("DB_PUT returned 1"); -		return (-1); -	} - -	return (0); -} - -int -usracct_update() -{ -	DB *saved_usracct_db; -	DBT key, data; -	BTREEINFO bti; -	u_long uid; -	int error, serr, nerr; - -	bzero(&bti, sizeof bti); -	bti.compare = uid_compare; - -	saved_usracct_db = dbopen(_PATH_USRACCT, O_RDWR|O_CREAT|O_TRUNC, 0644, -	    DB_BTREE, &bti); -	if (saved_usracct_db == NULL) { -		warn("creating user accounting summary"); -		return (-1); -	} - -	error = 0; - -	serr = DB_SEQ(usracct_db, &key, &data, R_FIRST); -	if (serr < 0) { -		warn("retrieving user accounting stats"); -		error = -1; -	} -	while (serr == 0) { -		nerr = DB_PUT(saved_usracct_db, &key, &data, 0); -		if (nerr < 0) { -			warn("saving user accounting summary"); -			error = -1; -			break; -		} - -		serr = DB_SEQ(usracct_db, &key, &data, R_NEXT); -		if (serr < 0) { -			warn("retrieving user accounting stats"); -			error = -1; -			break; -		} -	} - -	if (DB_SYNC(saved_usracct_db, 0) < 0) { -		warn("syncing process accounting summary"); -		error = -1; -	} -out: -	if (DB_CLOSE(saved_usracct_db) < 0) { -		warn("closing process accounting summary"); -		error = -1; -	} -	return error; -} - -void -usracct_print() -{ -	DBT key, data; -	struct userinfo *ui; -	double t; -	int rv; - -	rv = DB_SEQ(usracct_db, &key, &data, R_FIRST); -	if (rv < 0) -		warn("retrieving user accounting stats"); - -	while (rv == 0) { -		ui = (struct userinfo *) data.data; - -		printf("%-8s %9qu ", -		    user_from_uid(ui->ui_uid, 0), ui->ui_calls); - -		t = (double) (ui->ui_utime + ui->ui_stime) / -		    (double) AHZ; -		if (t < 0.0001)		/* kill divide by zero */ -			t = 0.0001; - -		printf("%12.2lf%s ", t / 60.0, "cpu"); - -		/* ui->ui_calls is always != 0 */ -		if (dflag) -			printf("%12qu%s", ui->ui_io / ui->ui_calls, "avio"); -		else -			printf("%12qu%s", ui->ui_io, "tio"); - -		/* t is always >= 0.0001; see above */ -		if (kflag) -			printf("%12qu%s", ui->ui_mem / t, "k"); -		else -			printf("%12qu%s", ui->ui_mem, "k*sec"); - -		printf("\n"); - -		rv = DB_SEQ(usracct_db, &key, &data, R_NEXT); -		if (rv < 0) -			warn("retrieving user accounting stats"); -	} -} - -static int -uid_compare(k1, k2) -	const DBT *k1, *k2; -{ -	u_long d1, d2; - -	bcopy(k1->data, &d1, sizeof d1); -	bcopy(k2->data, &d2, sizeof d2); -	 -	if (d1 < d2) -		return -1; -	else if (d1 == d2) -		return 0; -	else -		return 1; -} diff --git a/usr.sbin/spray/Makefile b/usr.sbin/spray/Makefile deleted file mode 100644 index 5ecd1c5be0e98..0000000000000 --- a/usr.sbin/spray/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -#	$Id: Makefile,v 1.2 1995/07/11 01:18:05 jtc Exp $ - -PROG=	spray -MAN8=	spray.8 -LDADD=	-lrpcsvc - -.include <bsd.prog.mk> diff --git a/usr.sbin/spray/spray.8 b/usr.sbin/spray/spray.8 deleted file mode 100644 index a47c899ed8413..0000000000000 --- a/usr.sbin/spray/spray.8 +++ /dev/null @@ -1,76 +0,0 @@ -.\" -.\" Copyright (c) 1994 James A. Jegers -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\"    notice, this list of conditions and the following disclaimer. -.\" 2. The name of the author may not be used to endorse or promote products -.\"    derived from this software without specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.Dd July 10, 1995 -.Dt SPRAY 8 -.Os FreeBSD -.Sh NAME -.Nm spray -.Nd send many packets to host  -.Sh SYNOPSIS -.Nm spray -.Op Fl c Ar count  -.Op Fl d Ar delay  -.Op Fl l Ar length -.Ar host  -\&... -.Ek -.Sh DESCRIPTION -.Nm Spray -sends multiple RPC packets to  -.Ar host -and records how many of them were correctly received and how long it took. -.Pp -The options are as follows: -.Bl -tag -width indent -.It Fl c Ar count -Send -.Ar count -packets. -.It Fl d Ar delay -Pause -.Ar delay -microseconds between sending each packet. -.It Fl l Ar length -Set the length of the packet that holds the RPC call message to  -.Ar length -bytes. -Not all values of -.Ar length -are possible because RPC data is encoded using XDR.  -.Nm Spray -rounds up to the nearest possible value. -.El -.Pp -.Nm Spray  -is intended for use in network testing, measurement, and management. -This command -.Bf -emphasis  -can be very hard on a network and should be used with caution. -.Ef -.Pp -.Sh SEE ALSO -.Xr netstat 1 , -.Xr ifconfig 8 , -.Xr ping 8 , -.Xr rpc.sprayd 8  diff --git a/usr.sbin/spray/spray.c b/usr.sbin/spray/spray.c deleted file mode 100644 index 607abc15b3fa8..0000000000000 --- a/usr.sbin/spray/spray.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) 1993 Winning Strategies, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *      This product includes software developed by Winning Strategies, Inc. - * 4. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - *	$Id: spray.c,v 1.3 1994/12/23 16:42:47 cgd Exp $ - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -#include <rpc/rpc.h> -#include <rpcsvc/spray.h> - -#ifndef SPRAYOVERHEAD -#define SPRAYOVERHEAD	86 -#endif - -void usage (); -void print_xferstats (); - -/* spray buffer */ -char spray_buffer[SPRAYMAX]; - -/* RPC timeouts */ -struct timeval NO_DEFAULT = { -1, -1 }; -struct timeval ONE_WAY = { 0, 0 }; -struct timeval TIMEOUT = { 25, 0 }; - -int -main(argc, argv) -	int argc; -	char **argv; -{ -	char *progname; -	spraycumul	host_stats; -	sprayarr	host_array; -	CLIENT *cl; -	int c; -	int i; -	int count = 0; -	int delay = 0; -	int length = 0; -	double xmit_time;			/* time to receive data */ - -	progname = *argv; -	while ((c = getopt(argc, argv, "c:d:l:")) != -1) { -		switch (c) { -		case 'c': -			count = atoi(optarg); -			break; -		case 'd': -			delay = atoi(optarg); -			break; -		case 'l': -			length = atoi(optarg); -			break; -		default: -			usage(); -			/* NOTREACHED */ -		} -	} -	argc -= optind; -	argv += optind; - -	if (argc != 1) { -		usage(); -		/* NOTREACHED */ -	} - - -	/* Correct packet length. */ -	if (length > SPRAYMAX) { -		length = SPRAYMAX; -	} else if (length < SPRAYOVERHEAD) { -		length = SPRAYOVERHEAD; -	} else { -		/* The RPC portion of the packet is a multiple of 32 bits. */ -		length -= SPRAYOVERHEAD - 3; -		length &= ~3; -		length += SPRAYOVERHEAD; -	} - - -	/* -	 * The default value of count is the number of packets required -	 * to make the total stream size 100000 bytes. -	 */ -	if (!count) { -		count = 100000 / length; -	} - -	/* Initialize spray argument */ -	host_array.sprayarr_len = length - SPRAYOVERHEAD; -	host_array.sprayarr_val = spray_buffer; -	 - -	/* create connection with server */ -	cl = clnt_create(*argv, SPRAYPROG, SPRAYVERS, "udp"); -	if (cl == NULL) { -		clnt_pcreateerror(progname); -		exit(1); -	} - - -	/* -	 * For some strange reason, RPC 4.0 sets the default timeout,  -	 * thus timeouts specified in clnt_call() are always ignored.   -	 * -	 * The following (undocumented) hack resets the internal state -	 * of the client handle. -	 */ -	clnt_control(cl, CLSET_TIMEOUT, (caddr_t)&NO_DEFAULT); - - -	/* Clear server statistics */ -	if (clnt_call(cl, SPRAYPROC_CLEAR, xdr_void, NULL, xdr_void, NULL, TIMEOUT) != RPC_SUCCESS) { -		clnt_perror(cl, progname); -		exit(1); -	} - - -	/* Spray server with packets */ -	printf ("sending %d packets of lnth %d to %s ...", count, length, *argv); -	fflush (stdout); - -	for (i = 0; i < count; i++) { -		clnt_call(cl, SPRAYPROC_SPRAY, xdr_sprayarr, &host_array, xdr_void, NULL, ONE_WAY); - -		if (delay) { -			usleep(delay); -		} -	} - - -	/* Collect statistics from server */ -	if (clnt_call(cl, SPRAYPROC_GET, xdr_void, NULL, xdr_spraycumul, &host_stats, TIMEOUT) != RPC_SUCCESS) { -		clnt_perror(cl, progname); -		exit(1); -	} - -	xmit_time = host_stats.clock.sec + -			(host_stats.clock.usec / 1000000.0); - -	printf ("\n\tin %.2f seconds elapsed time\n", xmit_time); - - -	/* report dropped packets */ -	if (host_stats.counter != count) { -		int packets_dropped = count - host_stats.counter; - -		printf("\t%d packets (%.2f%%) dropped\n", -			packets_dropped, -			100.0 * packets_dropped / count ); -	} else { -		printf("\tno packets dropped\n"); -	} - -	printf("Sent:"); -	print_xferstats(count, length, xmit_time); - -	printf("Rcvd:"); -	print_xferstats(host_stats.counter, length, xmit_time); -	 -	exit (0); -} - - -void -print_xferstats(packets, packetlen, xfertime) -	int packets; -	int packetlen; -	double xfertime; -{ -	int datalen; -	double pps;		/* packets per second */ -	double bps;		/* bytes per second */ - -	datalen = packets * packetlen; -	pps = packets / xfertime; -	bps = datalen / xfertime; - -	printf("\t%.0f packets/sec, ", pps); - -	if (bps >= 1024)  -		printf ("%.1fK ", bps / 1024); -	else -		printf ("%.0f ", bps); -	 -	printf("bytes/sec\n"); -} - - -void -usage () -{ -	fprintf(stderr, "usage: spray [-c count] [-l length] [-d delay] host\n"); -	exit(1); -} | 
