Subject: Standalone TM driver fix, u.u_nd not needed, more... (#362) Index: sys/{pdpuba,pdpstand,conf,h}/many 2.11BSD Description: 1. The standalone TM-11 (tm.c) driver's space forward/backward handling was broken. 2. An 18bit TM11 or RK11 controller in a 22bit Q-bus system crashes the kernel. 3. The 'u' structure ("struct user u") contains a 100 byte member ('u_nd') which unnecessarily makes the u struct bigger than need be. 4. sys/ufs_syscalls.c being a monolithic module causes problems when creating an overlay layout for the kernel. 5. The acc(4), css(4), imp(4), en(4) drivers would not compile. Repeat-By: 1. Boot a distribution tape on a TM-11 drive. Observe that loading a split I/D executable (file 3 is 'restor') via "tm(0,3)" crashes the standalone system. 2. Have an RK05 or TM11 present on a 22bit system without a Unibus Map (e.g an 11/73). Access the raw device (either '/dev/rrk0h' or '/dev/rmt0') and notice that the kernel panics or otherwise hangs/crashes. 3. Observation. Or by reading over the 4.4-Lite2 sources and noticing how a 'struct nameidata' structure was dynamically allocated on the stack. 4. This has been a problem for a long time. Whenever a change would be made or a new feature added to ufs_syscalls.c the object module ufs_syscalls.o would no longer fit in an exiting overlay structure. 5. Attempt to compile a networking kernel with the drivers acc, css, imp, or en. Fix: Items #1 and 2 were encountered when booting 2.11BSD under Bob Supnik's PDP11 emulator. Item #1: Loading 'tm(0,3)' would crash the emulated machine. The problem is that split I/D standalone programs ('restor' and 'icheck' - tm(0,3) and tm(0,4) respectively) require that the tapedriver be able to backspace the tape. The TM-11's reverse record spacing was broken because the space reverse change was made without access to a TM-11 for testing. Item #2: This is simply the inability of an 18bit controller to DMA above 256kb. The solution was to modify the RK05 and TM11 drivers to use the 'SOFUB_MAP' (software map) the same way that the RX driver does. Transfers from the raw device would overwrite the kernel resulting in a "panic" (if you were lucky) or the system would simply go dead. Item #3: While reading over a couple of the 4.4BSD kernel modules I happened across the 'NDINIT()' macro and noticed that 4.4 had no "u_nd" permanently allocated in the 'u' structure or proc structure. Since a 'u' area is allocated for every process in the system saving ~100 bytes can free up 4kb or more of physical memory. ALSO, since the 'u' structure has to be copied/replicated whenever a process forks saving 100 bytes can save a fair amount of time. Assuming two microseconds per instruction and a two instruction loop moving a word per iteration that's 2 * 2 * 50 = 200 microseconds saved on a 'fork', nothing to be sneezed at on a sub-1mips machine! Of course changing the 'u' area means that the kernel and a handful of applications need to be recompiled. The list of application programs is quite small. Item #4: In this case a couple of the smaller syscall routines were moved to ufs_syscalls2.c (which was created explicitly for this purpose some time back). Item #5: It is highly unlikely that anyone is still using any of the interfaces acc, css, imp, en (at one time the 'imp' and 'acc' drivers were known to work). It was easier to fix up the drivers to at least compile than it would have been to remove them from the system (or move them aside into an OLD/ directory). Drivers in the main source area should at least compile! NOTE: the 3mb/s ethernet driver ('en') is almost 100% guaranteed not to function. But I wager US$1 that no one has one in operable condition _and_ a network to plug it in to. The update kit below contains the following: 362.patch - a large patch file which updates the following files. /usr/src/sys/pdpuba/rk.c /usr/src/sys/pdpuba/tm.c /usr/src/sys/pdpuba/rl.c /usr/src/sys/pdpuba/dn.c /usr/src/sys/conf/GENERIC /usr/src/sys/conf/Make.sunix /usr/src/sys/sys/kern_sig.c /usr/src/sys/sys/init_main.c /usr/src/sys/sys/kern_acct.c /usr/src/sys/sys/ufs_syscalls.c /usr/src/sys/sys/ufs_syscalls2.c /usr/src/sys/sys/uipc_usrreq.c /usr/src/sys/sys/ufs_mount.c /usr/src/sys/sys/sys_kern.c /usr/src/sys/sys/quota_kern.c /usr/src/sys/sys/kern_exec.c /usr/src/sys/sys/kern_sysctl.c /usr/src/sys/sys/sys_pipe.c /usr/src/sys/sys/ufs_disksubr.c /usr/src/sys/h/namei.h /usr/src/sys/h/user.h /usr/src/sys/netimp/if_imphost.h /usr/src/sys/pdpstand/Makefile /usr/src/sys/pdpstand/makesimtape.c /usr/src/sys/pdpstand/tm.c /usr/src/sys/pdpstand/ht.c /usr/src/sys/pdpif/if_acc.c /usr/src/sys/pdpif/if_css.c /usr/src/sys/pdpif/if_en.c /usr/src/sys/GENERIC/rk.h /usr/src/sys/GENERIC/Makefile /usr/src/etc/dtab /usr/src/share/adb/u /usr/src/usr.sbin/pstat/pstat.c /VERSION 362.shar - a shar archive containing a new program being added to the system. The program being added is "makesimtape" and is used to create "tape files" for use with Bob Supnik's emulator. There is no manpage for 'makesimtape' but the usage is: makesimtape -i specfile -o tapefile where 'specfile' is in the same format as "maketape.data" in /sys/pdpstand. To install this update cut where indicated saving to a file (/tmp/362) and then: cd /tmp sh 362 patch -p0 < 362.patch sh 362.shar Next you will need to remake your kernel (and the GENERIC one too if you keep an emergency generic kernel in /genunix). You *MAY* need to adjust the overlay layout - be sure to watch for any "too big" messages from 'ld' and/or 'checksys': cd /sys/ make clean make make install If you wish to recompile the GENERIC kernel (this can be put off but why not do it now?): cd /sys/GENERIC make clean make mv unix /genunix Recompile 'boot' and the standalone utilities: cd /sys/pdpstand make clean make cp boot /boot Then reboot the system: reboot The following applications have to be recompiled: adb, ps, gcore, w, fstat, identd, and pstat: cd /usr/src/bin/adb make make install make clean cd /usr/src/bin make ps install -s -m 2755 -g kmem ps /bin/ps cd /usr/src/ucb make gcore w install -s -m 2755 -g kmem gcore /usr/ucb/gcore install -s -m 2755 -g kmem w /usr/ucb/w cd /usr/src/usr.bin/fstat make make install make clean cd /usr/src/libexec/identd make make install make clean cd /usr/src/usr.sbin/pstat make make install make clean This would be a good time to create a bootable tape with the new boot and standalone drivers: cd /sys/pdpstand ./maketape /dev/nrmt0 maketape.data dump 0f /dev/rmt0 / will create a bootable tape with all the standalone utilities present along with a dump of the root filesystem. This is a VERY handy thing to have in the event of a disk failure or other disaster. As always this and previous updates to 2.11BSD are available via anonymous FTP to either FTP.IIPO.GTEGSC.COM or MOE.2BSD.COM in the directory /pub/2.11BSD. ============================cut here====================== #!/bin/sh # This is a shell archive (produced by GNU sharutils 4.1). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 1997-01-23 21:25 PST by . # Source directory was `/users/sms/KIT'. # # Existing files will *not* be overwritten unless `-c' is specified. # This format requires very little intelligence at unshar time. # "if test", "echo", and "sed" may be needed. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 71567 -rw-r----- /tmp/362.patch # 3677 -rw-r----- /tmp/362.shar # # ============= /tmp/362.patch ============== if test ! -d '/tmp'; then echo 'x - creating directory /tmp' mkdir '/tmp' fi if test -f '/tmp/362.patch' && test X"$1" != X"-c"; then echo 'x - skipping /tmp/362.patch (file already exists)' else echo 'x - extracting /tmp/362.patch (text)' sed 's/^X//' << 'SHAR_EOF' > '/tmp/362.patch' && X*** /usr/src/sys/pdpuba/rk.c.old Sat Jan 2 23:13:30 1993 X--- /usr/src/sys/pdpuba/rk.c Sat Jan 18 16:44:45 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)rk.c 1.4 (2.11BSD GTE) 1/2/93 X */ X X /* X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)rk.c 1.5 (2.11BSD GTE) 1997/1/18 X */ X X /* X*************** X*** 20,25 **** X--- 20,28 ---- X #include "user.h" X #include "dk.h" X #include "rkreg.h" X+ #include "syslog.h" X+ #include "map.h" X+ #include "uba.h" X X #define NRKBLK 4872 /* Number of blocks per drive */ X X*************** X*** 33,38 **** X--- 36,48 ---- X static int rk_dkn = -1; /* number for iostat */ X #endif X X+ #ifdef SOFUB_MAP X+ static int rksoftmap = -1; /* -1 = OK to check for softmap X+ * 0 = Never use softmap X+ * 1 = Always use softmap X+ */ X+ #endif X+ X rkattach(addr, unit) X struct rkdevice *addr; X { X*************** X*** 41,48 **** X dk_alloc(&rk_dkn, 1, "rk", 25L * 12L * 256L); X #endif X X! if (unit != 0) X return(0); X RKADDR = addr; X return(1); X } X--- 51,62 ---- X dk_alloc(&rk_dkn, 1, "rk", 25L * 12L * 256L); X #endif X X! if (unit != 0) X return(0); X+ #ifdef SOFUB_MAP X+ if (!ubmap && rksoftmap == -1) X+ rksoftmap = 1; X+ #endif X RKADDR = addr; X return(1); X } X*************** X*** 75,80 **** X--- 89,102 ---- X iodone(bp); X return; X } X+ #ifdef SOFUB_MAP X+ if (rksoftmap == 1) X+ { X+ if (sofub_alloc(bp) == 0) X+ return; X+ } X+ else X+ #endif X mapalloc(bp); X bp->av_forw = (struct buf *)NULL; X s = splbio(); X*************** X*** 143,153 **** X * Give up on write locked devices X * immediately. X */ X! printf("rk%d: write locked\n", minor(bp->b_dev)); X else X { X harderr(bp, "rk"); X! printf("er=%b ds=%b\n", rkaddr->rker, RKER_BITS, X rkaddr->rkds, RK_BITS); X rkaddr->rkcs = RKCS_RESET | RKCS_GO; X while((rkaddr->rkcs & RKCS_RDY) == 0) X--- 165,175 ---- X * Give up on write locked devices X * immediately. X */ X! uprintf("rk%d: write locked\n", minor(bp->b_dev)); X else X { X harderr(bp, "rk"); X! log(LOG_NOTICE,"er=%b ds=%b\n", rkaddr->rker, RKER_BITS, X rkaddr->rkds, RK_BITS); X rkaddr->rkcs = RKCS_RESET | RKCS_GO; X while((rkaddr->rkcs & RKCS_RDY) == 0) X*************** X*** 162,167 **** X--- 184,193 ---- X rktab.b_errcnt = 0; X rktab.b_actf = bp->av_forw; X bp->b_resid = -(rkaddr->rkwc << 1); X+ #ifdef SOFUB_MAP X+ if (rksoftmap == 1) X+ sofub_relse(bp, bp->b_bcount - bp->b_resid); X+ #endif X iodone(bp); X rkstart(); X } X*** /usr/src/sys/pdpuba/tm.c.old Sat Jan 2 23:29:04 1993 X--- /usr/src/sys/pdpuba/tm.c Sat Jan 18 16:44:57 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)tm.c 2.2 (2.11BSD GTE) 1/2/93 X */ X X /* X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)tm.c 2.3 (2.11BSD GTE) 1997/1/18 X */ X X /* X*************** X*** 23,28 **** X--- 23,31 ---- X #include "kernel.h" X #include "systm.h" X #include "tmreg.h" X+ #include "syslog.h" X+ #include "map.h" X+ #include "uba.h" X X struct tmdevice *TMADDR; X X*************** X*** 83,88 **** X--- 86,98 ---- X X int tmtimer (); X X+ #ifdef SOFUB_MAP X+ static int tmsoftmap = -1; /* -1 = OK to check for softmap X+ * 0 = Never use softmap X+ * 1 = Always use softmap X+ */ X+ #endif X+ X tmattach(addr, unit) X struct tmdevice *addr; X int unit; X*************** X*** 90,100 **** X /* X * This driver supports only one controller. X */ X! if (unit == 0) { X! TMADDR = addr; X! return(1); X! } X! return(0); X } X X /* X--- 100,113 ---- X /* X * This driver supports only one controller. X */ X! if (unit) X! return(0); X! #ifdef SOFUB_MAP X! if (!ubmap && tmsoftmap == -1) X! tmsoftmap = 1; X! #endif X! TMADDR = addr; X! return(1); X } X X /* X*************** X*** 240,246 **** X--- 253,277 ---- X register s; X register struct te_softc *sc = &te_softc[TEUNIT(bp->b_dev)]; X X+ #ifdef SOFUB_MAP X+ /* X+ * The 'soft' map must be allocated here because the transfer may be (although X+ * it very rarely is) going to the buffer cache rather than a user process. X+ * This has the side effect that a rewinding tape can keep the 'soft' map busy X+ * for a fairly long time. In practice this is not much of a problem since X+ * the main use of 18 bit TM controllers on a 22 bit system is with a PDP-11 X+ * simulator - in which case there's no tape to wait for. X+ */ X+ if (tmsoftmap == 1) X+ { X+ if (sofub_alloc(bp) == 0) X+ return; X+ } X+ #endif X if (bp->b_flags & B_PHYS) { X+ #ifdef SOFUB_MAP X+ if (tmsoftmap <= 0) X+ #endif X mapalloc(bp); X sc->sc_blkno = sc->sc_nxrec = dbtofsb(bp->b_blkno); X sc->sc_nxrec++; X*************** X*** 395,400 **** X--- 426,435 ---- X */ X tmtab.b_errcnt = 0; X tmtab.b_actf = bp->av_forw; X+ #ifdef SOFUB_MAP X+ if (tmsoftmap == 1) X+ sofub_relse(bp, bp->b_bcount - bp->b_resid); X+ #endif X iodone(bp); X goto loop; X } X*************** X*** 481,487 **** X /* X * Couldn't recover error X */ X! printf("te%d: hard error bn%D er=%b\n", X teunit, bp->b_blkno, sc->sc_erreg, TMER_BITS); X bp->b_flags |= B_ERROR; X goto opdone; X--- 516,522 ---- X /* X * Couldn't recover error X */ X! uprintf("te%d: hard error bn%D er=%b\n", X teunit, bp->b_blkno, sc->sc_erreg, TMER_BITS); X bp->b_flags |= B_ERROR; X goto opdone; X*************** X*** 525,530 **** X--- 560,569 ---- X tmtab.b_errcnt = 0; X tmtab.b_actf = bp->av_forw; X bp->b_resid = -tmaddr->tmbc; X+ #ifdef SOFUB_MAP X+ if (tmsoftmap == 1) X+ sofub_relse(bp, bp->b_bcount - bp->b_resid); X+ #endif X iodone(bp); X X opcont: X*************** X*** 538,544 **** X register struct te_softc *sc = &te_softc[TEUNIT(dev)]; X X if (sc->sc_timo != INF && (sc->sc_timo -= 5) < 0) { X! printf("te%d: lost interrupt\n", TEUNIT(dev)); X sc->sc_timo = INF; X s = splbio(); X tmintr(); X--- 577,583 ---- X register struct te_softc *sc = &te_softc[TEUNIT(dev)]; X X if (sc->sc_timo != INF && (sc->sc_timo -= 5) < 0) { X! log(LOG_NOTICE, "te%d: lost interrupt\n", TEUNIT(dev)); X sc->sc_timo = INF; X s = splbio(); X tmintr(); X*** /usr/src/sys/pdpuba/rl.c.old Mon Jan 8 20:15:34 1996 X--- /usr/src/sys/pdpuba/rl.c Sun Jan 19 11:21:01 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)rl.c 1.8 (2.11BSD GTE) 1996/1/8 X */ X X /* X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)rl.c 1.9 (2.11BSD GTE) 1997/1/19 X */ X X /* X*************** X*** 38,43 **** X--- 38,44 ---- X X #include "param.h" X #include "buf.h" X+ #include "machine/seg.h" X #include "user.h" X #include "systm.h" X #include "conf.h" X*** /usr/src/sys/pdpuba/dn.c.old Wed Nov 30 21:33:36 1994 X--- /usr/src/sys/pdpuba/dn.c Sun Jan 19 12:06:37 1997 X*************** X*** 1,5 **** X /* X! * SCCS id @(#)dn.c 2.2 (2.11BSD GTE) 11/29/94 X */ X X /* X--- 1,5 ---- X /* X! * SCCS id @(#)dn.c 2.3 (2.11BSD GTE) 1997/1/18 X */ X X /* X*************** X*** 11,16 **** X--- 11,17 ---- X #if NDN > 0 X #include "param.h" X #include "user.h" X+ #include "uio.h" X #include "kernel.h" X #include "dnreg.h" X X*** /usr/src/sys/conf/GENERIC.old Thu Dec 14 21:57:41 1995 X--- /usr/src/sys/conf/GENERIC Tue Jan 21 20:04:45 1997 X*************** X*** 1,3 **** X--- 1,4 ---- X+ # 1997/1/21 - RK added to GENERIC kernel (for use with Bob Supnik's emulator) X # 1995/12/14 - RX added to GENERIC kernel. X # 1995/07/21 - XP_PROBE removed. X # X*************** X*** 145,151 **** X NRAC 2 # NRAD controllers X NRAD 3 # RX50, RC25, RD51/52/53, RA60/80/81 X X! NRK 0 # RK05 X X NRL 2 # RL01/02 X X--- 146,152 ---- X NRAC 2 # NRAD controllers X NRAD 3 # RX50, RC25, RD51/52/53, RA60/80/81 X X! NRK 8 # RK05 X X NRL 2 # RL01/02 X X*** /usr/src/sys/conf/Make.sunix.old Sat Sep 21 22:44:08 1996 X--- /usr/src/sys/conf/Make.sunix Tue Jan 21 20:05:39 1997 X*************** X*** 9,15 **** X # software without specific prior written permission. This software X # is provided ``as is'' without express or implied warranty. X # X! # 2.7 (2.11BSD GTE) 1996/9/21 X # X ######################################################### X # Non-network, but separate I/D kernel # X--- 9,15 ---- X # software without specific prior written permission. This software X # is provided ``as is'' without express or implied warranty. X # X! # 2.8 (2.11BSD GTE) 1997/1/21 X # X ######################################################### X # Non-network, but separate I/D kernel # X*************** X*** 47,53 **** X X BASE= br.o dh.o dhu.o dhv.o dkbad.o dr.o dz.o init_sysent.o kern_clock.o \ X kern_descrip.o kern_mman.o kern_proc.o kern_sig.o kern_subr.o \ X! kern_synch.o lp.o machdep.o ra.o ram.o rk.o si.o \ X subr_rmap.o subr_xxx.o sys_inode.o sys_pipe.o trap.o tty.o \ X tty_conf.o tty_subr.o tty_tb.o tty_tty.o ufs_alloc.o ufs_bio.o \ X ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \ X--- 47,53 ---- X X BASE= br.o dh.o dhu.o dhv.o dkbad.o dr.o dz.o init_sysent.o kern_clock.o \ X kern_descrip.o kern_mman.o kern_proc.o kern_sig.o kern_subr.o \ X! kern_synch.o lp.o machdep.o ra.o ram.o si.o \ X subr_rmap.o subr_xxx.o sys_inode.o sys_pipe.o trap.o tty.o \ X tty_conf.o tty_subr.o tty_tb.o tty_tty.o ufs_alloc.o ufs_bio.o \ X ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \ X*************** X*** 63,69 **** X OV6= tmscp.o tmscpdump.o X OV7= rl.o mch_fpsim.o ingreslock.o ufs_disksubr.o X OV8= rx.o kern_sysctl.o vm_sched.o vm_text.o X! OV9= kern_pdp.o kern_xxx.o ufs_syscalls2.o mem.o ufs_subr.o X X KERNOBJ=${CONF} ${BASE} ${OV1} ${OV2} ${OV3} ${OV4} ${OV5} \ X ${OV6} ${OV7} ${OV8} ${OV9} ${OV10} ${OV11} ${OV12} \ X--- 63,69 ---- X OV6= tmscp.o tmscpdump.o X OV7= rl.o mch_fpsim.o ingreslock.o ufs_disksubr.o X OV8= rx.o kern_sysctl.o vm_sched.o vm_text.o X! OV9= kern_pdp.o kern_xxx.o ufs_syscalls2.o mem.o ufs_subr.o rk.o X X KERNOBJ=${CONF} ${BASE} ${OV1} ${OV2} ${OV3} ${OV4} ${OV5} \ X ${OV6} ${OV7} ${OV8} ${OV9} ${OV10} ${OV11} ${OV12} \ X*** /usr/src/sys/sys/kern_sig.c.old Mon Sep 16 21:06:27 1996 X--- /usr/src/sys/sys/kern_sig.c Sat Jan 18 22:57:29 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)kern_sig.c 1.6 (2.11BSD GTE) 1996/9/13 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)kern_sig.c 1.7 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 801,807 **** X core() X { X register struct inode *ip; X! register struct nameidata *ndp = &u.u_nd; X register char *np; X char *cp, name[MAXCOMLEN + 6]; X X--- 801,808 ---- X core() X { X register struct inode *ip; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X register char *np; X char *cp, name[MAXCOMLEN + 6]; X X*************** X*** 821,829 **** X while (*np++ = *cp++) X ; X u.u_error = 0; X! ndp->ni_nameiop = CREATE | FOLLOW; X! ndp->ni_segflg = UIO_SYSSPACE; X! ndp->ni_dirp = name; X ip = namei(ndp); X if (ip == NULL) { X if (u.u_error) X--- 822,828 ---- X while (*np++ = *cp++) X ; X u.u_error = 0; X! NDINIT(ndp, CREATE, FOLLOW, UIO_SYSSPACE, name); X ip = namei(ndp); X if (ip == NULL) { X if (u.u_error) X*** /usr/src/sys/sys/init_main.c.old Thu May 9 20:37:05 1996 X--- /usr/src/sys/sys/init_main.c Sat Jan 18 22:20:46 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)init_main.c 2.1 (2.11BSD GTE) 1996/5/9 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)init_main.c 2.2 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 77,84 **** X X u.u_procp = p; /* init user structure */ X u.u_ap = u.u_arg; X- u.u_nd.ni_iov = &u.u_nd.ni_iovec; X- u.u_nd.ni_iovcnt = 1; X u.u_cmask = cmask; X u.u_lastfile = -1; X for (i = 1; i < NGROUPS; i++) X--- 77,82 ---- X*************** X*** 339,350 **** X off_t off; X int initdata, netdsize, nettsize, ret, err, resid; X char oneclick[ctob(1)]; X! register struct nameidata *ndp = &u.u_nd; X X ret = 1; X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_SYSSPACE; X! ndp->ni_dirp = NETNIX; X if (!(ip = namei(ndp))) { X printf("%s not found\n", NETNIX); X goto leave; X--- 337,347 ---- X off_t off; X int initdata, netdsize, nettsize, ret, err, resid; X char oneclick[ctob(1)]; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X ret = 1; X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, NETNIX); X if (!(ip = namei(ndp))) { X printf("%s not found\n", NETNIX); X goto leave; X*************** X*** 356,362 **** X err = rdwri(UIO_READ, ip, &ex, sizeof (ex), (off_t)0, UIO_SYSSPACE, X IO_UNIT, &resid); X if (err || resid) { X! printf("%s header err %d\n", NETNIX, ret); X goto leave; X } X if (ex.a_magic != A_MAGIC3) { X--- 353,359 ---- X err = rdwri(UIO_READ, ip, &ex, sizeof (ex), (off_t)0, UIO_SYSSPACE, X IO_UNIT, &resid); X if (err || resid) { X! printf("%s header %d\n", NETNIX, ret); X goto leave; X } X if (ex.a_magic != A_MAGIC3) { X*************** X*** 365,371 **** X } X lsize = (long)ex.a_data + (long)ex.a_bss; X if (lsize > 48L * 1024L) { X! printf("%s too big %ld\n", NETNIX, lsize); X goto leave; X } X nettsize = btoc(ex.a_text); X--- 362,368 ---- X } X lsize = (long)ex.a_data + (long)ex.a_bss; X if (lsize > 48L * 1024L) { X! printf("%s 2big %ld\n", NETNIX, lsize); X goto leave; X } X nettsize = btoc(ex.a_text); X*************** X*** 426,440 **** X leave: if (ip) X iput(ip); X u.u_error = 0; X- ndp->ni_dirp = 0; X- ndp->ni_segflg = UIO_USERSPACE; X- ndp->ni_endoff = 0; X- bzero(&u.u_ncache, sizeof(u.u_ncache)); X- bzero(&ndp->ni_dent, sizeof(ndp->ni_dent)); X- if (ndp->ni_pdir) { X- iput(ndp->ni_pdir); X- ndp->ni_pdir = 0; X- } X return(ret); X } X #endif X--- 423,428 ---- X*** /usr/src/sys/sys/kern_acct.c.old Mon Sep 16 21:09:07 1996 X--- /usr/src/sys/sys/kern_acct.c Sat Jan 18 23:05:26 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)kern_acct.c 2.3 (2.11BSD) 1996/9/13 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)kern_acct.c 2.4 (2.11BSD) 1997/1/18 X */ X X #include "param.h" X*************** X*** 12,17 **** X--- 12,18 ---- X #include "dir.h" X #include "inode.h" X #include "user.h" X+ #include "namei.h" X #include "proc.h" X #include "acct.h" X #include "kernel.h" X*************** X*** 35,41 **** X register struct a { X char *fname; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X int acctwatch(); X X if (suser()) { X--- 36,43 ---- X register struct a { X char *fname; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X int acctwatch(); X X if (suser()) { X*************** X*** 52,60 **** X } X return; X } X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip == NULL) X return; X--- 54,60 ---- X } X return; X } X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip == NULL) X return; X*** /usr/src/sys/sys/ufs_syscalls.c.old Sat Sep 28 20:39:56 1996 X--- /usr/src/sys/sys/ufs_syscalls.c Sun Jan 19 10:31:54 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)ufs_syscalls.c 1.7 (2.11BSD GTE) 1996/9/13 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)ufs_syscalls.c 1.8 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 76,86 **** X struct a { X char *fname; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip == NULL) X return; X--- 76,85 ---- X struct a { X char *fname; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 140,146 **** X { X register struct inode *ip; X register struct file *fp; X! register struct nameidata *ndp = &u.u_nd; X int indx, type; X X mode = FFLAGS(mode); /* convert from open to kernel flags */ X--- 139,146 ---- X { X register struct inode *ip; X register struct file *fp; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X int indx, type; X X mode = FFLAGS(mode); /* convert from open to kernel flags */ X*************** X*** 148,155 **** X if (fp == NULL) X return; X indx = u.u_r.r_val1; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = fname; X if (mode & O_CREAT) { X if (mode & O_EXCL) X ndp->ni_nameiop = CREATE; X--- 148,154 ---- X if (fp == NULL) X return; X indx = u.u_r.r_val1; X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, fname); X if (mode & O_CREAT) { X if (mode & O_EXCL) X ndp->ni_nameiop = CREATE; X*************** X*** 248,260 **** X int fmode; X int dev; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X X if (!suser()) X return; X! ndp->ni_nameiop = CREATE; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip != NULL) { X u.u_error = EEXIST; X--- 247,258 ---- X int fmode; X int dev; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X if (!suser()) X return; X! NDINIT(ndp, CREATE, NOFOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip != NULL) { X u.u_error = EEXIST; X*************** X*** 294,304 **** X char *target; X char *linkname; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->target; X ip = namei(ndp); /* well, this routine is doomed anyhow */ X if (ip == NULL) X return; X--- 292,301 ---- X char *target; X char *linkname; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->target); X ip = namei(ndp); /* well, this routine is doomed anyhow */ X if (ip == NULL) X return; X*************** X*** 316,322 **** X iupdat(ip, &time, &time, 1); X iunlock(ip); X ndp->ni_nameiop = CREATE; X- ndp->ni_segflg = UIO_USERSPACE; X ndp->ni_dirp = (caddr_t)uap->linkname; X xp = namei(ndp); X if (xp != NULL) { X--- 313,318 ---- X*************** X*** 352,358 **** X register struct inode *ip; X char *tp; X int c, nc; X! register struct nameidata *ndp = &u.u_nd; X X tp = uap->target; X nc = 0; X--- 348,355 ---- X register struct inode *ip; X char *tp; X int c, nc; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X tp = uap->target; X nc = 0; X*************** X*** 364,372 **** X tp++; X nc++; X } X! ndp->ni_nameiop = CREATE; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->linkname; X ip = namei(ndp); X if (ip) { X iput(ip); X--- 361,367 ---- X tp++; X nc++; X } X! NDINIT(ndp, CREATE, NOFOLLOW, UIO_USERSPACE, uap->linkname); X ip = namei(ndp); X if (ip) { X iput(ip); X*************** X*** 395,405 **** X char *fname; X } *uap = (struct a *)u.u_ap; X register struct inode *ip, *dp; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = DELETE | LOCKPARENT; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip == NULL) X return; X--- 390,399 ---- X char *fname; X } *uap = (struct a *)u.u_ap; X register struct inode *ip, *dp; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, DELETE, LOCKPARENT, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 432,476 **** X } X X /* X- * Seek system call X- */ X- lseek() X- { X- register struct file *fp; X- register struct a { X- int fd; X- off_t off; X- int sbase; X- } *uap = (struct a *)u.u_ap; X- X- if ((fp = getf(uap->fd)) == NULL) X- return; X- if (fp->f_type != DTYPE_INODE) { X- u.u_error = ESPIPE; X- return; X- } X- switch (uap->sbase) { X- X- case L_INCR: X- fp->f_offset += uap->off; X- break; X- X- case L_XTND: X- fp->f_offset = uap->off + ((struct inode *)fp->f_data)->i_size; X- break; X- X- case L_SET: X- fp->f_offset = uap->off; X- break; X- X- default: X- u.u_error = EINVAL; X- return; X- } X- u.u_r.r_off = fp->f_offset; X- } X- X- /* X * Access system call X */ X saccess() X--- 426,431 ---- X*************** X*** 482,496 **** X char *fname; X int fmode; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X X svuid = u.u_uid; X svgid = u.u_gid; X u.u_uid = u.u_ruid; X u.u_gid = u.u_rgid; X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip != NULL) { X if ((uap->fmode&R_OK) && access(ip, IREAD)) X--- 437,450 ---- X char *fname; X int fmode; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X svuid = u.u_uid; X svgid = u.u_gid; X u.u_uid = u.u_ruid; X u.u_gid = u.u_rgid; X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip != NULL) { X if ((uap->fmode&R_OK) && access(ip, IREAD)) X*************** X*** 533,543 **** X struct stat *ub; X } *uap = (struct a *)u.u_ap; X struct stat sb; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = LOOKUP | follow; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip == NULL) X return; X--- 487,496 ---- X struct stat *ub; X } *uap = (struct a *)u.u_ap; X struct stat sb; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, LOOKUP, follow, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 557,568 **** X char *buf; X int count; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X int resid; X X! ndp->ni_nameiop = LOOKUP; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->name; X ip = namei(ndp); X if (ip == NULL) X return; X--- 510,520 ---- X char *buf; X int count; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X int resid; X X! NDINIT(ndp, LOOKUP, NOFOLLOW, UIO_USERSPACE, uap->name); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 587,597 **** X char *fname; X u_short flags; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = LOOKUP|FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X if ((ip = namei(ndp)) == NULL) X return; X u.u_error = chflags1(ip, uap->flags); X--- 539,548 ---- X char *fname; X u_short flags; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X if ((ip = namei(ndp)) == NULL) X return; X u.u_error = chflags1(ip, uap->flags); X*************** X*** 638,648 **** X int fmode; X } *uap = (struct a *)u.u_ap; X struct vattr vattr; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = LOOKUP|FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (!ip) X return; X--- 589,598 ---- X int fmode; X } *uap = (struct a *)u.u_ap; X struct vattr vattr; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (!ip) X return; X*************** X*** 709,720 **** X int uid; X int gid; X } *uap = (struct a *)u.u_ap; X! register struct nameidata *ndp = &u.u_nd; X struct vattr vattr; X X! ndp->ni_nameiop = LOOKUP | NOFOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip == NULL) X return; X--- 659,669 ---- X int uid; X int gid; X } *uap = (struct a *)u.u_ap; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X struct vattr vattr; X X! NDINIT(ndp, LOOKUP, NOFOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 810,816 **** X struct timeval *tptr; X } *uap = (struct a *)u.u_ap; X register struct inode *ip; X! register struct nameidata *ndp = &u.u_nd; X struct timeval tv[2]; X struct vattr vattr; X X--- 759,766 ---- X struct timeval *tptr; X } *uap = (struct a *)u.u_ap; X register struct inode *ip; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X struct timeval tv[2]; X struct vattr vattr; X X*************** X*** 820,828 **** X vattr.va_vaflags |= VA_UTIMES_NULL; X } else if (u.u_error = copyin((caddr_t)uap->tptr,(caddr_t)tv,sizeof(tv))) X return; X! ndp->ni_nameiop = LOOKUP|FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X if ((ip = namei(ndp)) == NULL) X return; X vattr.va_atime = tv[0].tv_sec; X--- 770,776 ---- X vattr.va_vaflags |= VA_UTIMES_NULL; X } else if (u.u_error = copyin((caddr_t)uap->tptr,(caddr_t)tv,sizeof(tv))) X return; X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X if ((ip = namei(ndp)) == NULL) X return; X vattr.va_atime = tv[0].tv_sec; X*************** X*** 841,852 **** X off_t length; X } *uap = (struct a *)u.u_ap; X register struct inode *ip; X! register struct nameidata *ndp = &u.u_nd; X struct vattr vattr; X X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->fname; X ip = namei(ndp); X if (ip == NULL) X return; X--- 789,799 ---- X off_t length; X } *uap = (struct a *)u.u_ap; X register struct inode *ip; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X struct vattr vattr; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 939,950 **** X register struct inode *ip, *xp, *dp; X struct dirtemplate dirbuf; X int doingdirectory = 0, oldparent = 0, newparent = 0; X! register struct nameidata *ndp = &u.u_nd; X int error = 0; X X! ndp->ni_nameiop = DELETE | LOCKPARENT; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->from; X ip = namei(ndp); X if (ip == NULL) X return; X--- 886,896 ---- X register struct inode *ip, *xp, *dp; X struct dirtemplate dirbuf; X int doingdirectory = 0, oldparent = 0, newparent = 0; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X int error = 0; X X! NDINIT(ndp, DELETE, LOCKPARENT, UIO_USERSPACE, uap->from); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 1145,1153 **** X /* X * 3) Unlink the source. X */ X! ndp->ni_nameiop = DELETE | LOCKPARENT; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->from; X xp = namei(ndp); X if (xp != NULL) X dp = ndp->ni_pdir; X--- 1091,1097 ---- X /* X * 3) Unlink the source. X */ X! NDINIT(ndp, DELETE, LOCKPARENT, UIO_USERSPACE, uap->from); X xp = namei(ndp); X if (xp != NULL) X dp = ndp->ni_pdir; X*************** X*** 1302,1315 **** X } *uap = (struct a *)u.u_ap; X register struct inode *ip, *dp; X struct dirtemplate dirtemplate; X! register struct nameidata *ndp = &u.u_nd; X #ifdef QUOTA X struct dquot **xdq; X #endif X X! ndp->ni_nameiop = CREATE; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->name; X ip = namei(ndp); X if (u.u_error) X return; X--- 1246,1258 ---- X } *uap = (struct a *)u.u_ap; X register struct inode *ip, *dp; X struct dirtemplate dirtemplate; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X #ifdef QUOTA X struct dquot **xdq; X #endif X X! NDINIT(ndp, CREATE, NOFOLLOW, UIO_USERSPACE, uap->name); X ip = namei(ndp); X if (u.u_error) X return; X*************** X*** 1384,1392 **** X u.u_error = direnter(ip, ndp); X dp = NULL; X if (u.u_error) { X! ndp->ni_nameiop = LOOKUP | NOCACHE; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->name; X dp = namei(ndp); X if (dp) { X dp->i_nlink--; X--- 1327,1333 ---- X u.u_error = direnter(ip, ndp); X dp = NULL; X if (u.u_error) { X! NDINIT(ndp, LOOKUP, NOCACHE, UIO_USERSPACE, uap->name); X dp = namei(ndp); X if (dp) { X dp->i_nlink--; X*************** X*** 1417,1427 **** X char *name; X } *uap = (struct a *)u.u_ap; X register struct inode *ip, *dp; X! register struct nameidata *ndp = &u.u_nd; X X! ndp->ni_nameiop = DELETE | LOCKPARENT; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->name; X ip = namei(ndp); X if (ip == NULL) X return; X--- 1358,1367 ---- X char *name; X } *uap = (struct a *)u.u_ap; X register struct inode *ip, *dp; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X! NDINIT(ndp, DELETE, LOCKPARENT, UIO_USERSPACE, uap->name); X ip = namei(ndp); X if (ip == NULL) X return; X*************** X*** 1508,1524 **** X return ((struct inode *)0); X } X return((struct inode *)fp->f_data); X- } X- X- /* X- * mode mask for creation of files X- */ X- umask() X- { X- register struct a { X- int mask; X- } *uap = (struct a *)u.u_ap; X- X- u.u_r.r_val1 = u.u_cmask; X- u.u_cmask = uap->mask & 07777; X } X--- 1448,1451 ---- X*** /usr/src/sys/sys/ufs_syscalls2.c.old Sat Sep 28 20:39:58 1996 X--- /usr/src/sys/sys/ufs_syscalls2.c Sun Jan 19 10:02:26 1997 X*************** X*** 1,12 **** X /* X! * @(#) ufs_syscalls2.c 1.3 (2.11BSD) 1996/9/13 X * X! * ufs_syscalls was getting too large. New UFS related system calls are X! * placed in this file. X */ X X #include "param.h" X #include "../machine/seg.h" X #include "user.h" X #include "inode.h" X #include "buf.h" X--- 1,13 ---- X /* X! * @(#) ufs_syscalls2.c 1.4 (2.11BSD) 1997/1/18 X * X! * ufs_syscalls was getting too large. Various UFS related system calls were X! * relocated to this file. X */ X X #include "param.h" X #include "../machine/seg.h" X+ #include "sys/file.h" X #include "user.h" X #include "inode.h" X #include "buf.h" X*************** X*** 23,34 **** X struct statfs *buf; X } *uap = (struct a *)u.u_ap; X register struct inode *ip; X! register struct nameidata *ndp = &u.u_nd; X struct mount *mp; X X! ndp->ni_nameiop = LOOKUP|FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = uap->path; X ip = namei(ndp); X if (!ip) X return(u.u_error); X--- 24,34 ---- X struct statfs *buf; X } *uap = (struct a *)u.u_ap; X register struct inode *ip; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X struct mount *mp; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->path); X ip = namei(ndp); X if (!ip) X return(u.u_error); X*************** X*** 191,193 **** X--- 191,242 ---- X iput(ip); X } X } X+ X+ /* X+ * mode mask for creation of files X+ */ X+ umask() X+ { X+ register struct a { X+ int mask; X+ } *uap = (struct a *)u.u_ap; X+ X+ u.u_r.r_val1 = u.u_cmask; X+ u.u_cmask = uap->mask & 07777; X+ } X+ X+ /* X+ * Seek system call X+ */ X+ lseek() X+ { X+ register struct file *fp; X+ register struct a { X+ int fd; X+ off_t off; X+ int sbase; X+ } *uap = (struct a *)u.u_ap; X+ X+ if ((fp = getf(uap->fd)) == NULL) X+ return; X+ if (fp->f_type != DTYPE_INODE) { X+ u.u_error = ESPIPE; X+ return; X+ } X+ switch (uap->sbase) { X+ X+ case L_INCR: X+ fp->f_offset += uap->off; X+ break; X+ case L_XTND: X+ fp->f_offset = uap->off + ((struct inode *)fp->f_data)->i_size; X+ break; X+ case L_SET: X+ fp->f_offset = uap->off; X+ break; X+ default: X+ u.u_error = EINVAL; X+ return; X+ } X+ u.u_r.r_off = fp->f_offset; X+ } X*** /usr/src/sys/sys/uipc_usrreq.c.old Sat Feb 5 19:46:18 1994 X--- /usr/src/sys/sys/uipc_usrreq.c Sat Jan 18 22:28:07 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)uipc_usrreq.c 7.1.1 (2.11BSD GTE) 12/31/93 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)uipc_usrreq.c 7.1.2 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 13,19 **** X #include "protosw.h" X #include "socket.h" X #include "socketvar.h" X- #include "namei.h" X #include "unpcb.h" X #include "un.h" X #include "inode.h" X--- 13,18 ---- X*************** X*** 31,40 **** X struct sockaddr sun_noname = { AF_UNIX }; X ino_t unp_ino; /* prototype for fake inode numbers */ X X- #ifdef pdp11 X extern void unpdisc(), unpgc1(); X extern int fadjust(); X- #endif X X /*ARGSUSED*/ X uipc_usrreq(so, req, m, nam, rights) X--- 30,37 ---- X*************** X*** 314,325 **** X { X X if (unp->unp_inode) { X- #ifdef pdp11 X UNPDET(unp->unp_inode); X- #else X- unp->unp_inode->i_socket = 0; X- irele(unp->unp_inode); X- #endif X unp->unp_inode = 0; X } X if (unp->unp_conn) X--- 311,317 ---- X*************** X*** 345,351 **** X if (unp->unp_inode != NULL || nam->m_len >= MLEN) X return (EINVAL); X *(mtod(nam, caddr_t) + nam->m_len) = 0; X- #ifdef pdp11 X error = UNPBIND(soun->sun_path, nam->m_len, &ip, unp->unp_socket); X if (error) X return(error); X--- 337,342 ---- X*************** X*** 353,383 **** X panic("unp_bind"); X unp->unp_inode = ip; X unp->unp_addr = m_copy(nam, 0, M_COPYALL); X- #else X- ndp->ni_nameiop = CREATE | FOLLOW; X- ndp->ni_segflg = UIO_SYSSPACE; X- ndp->ni_dirp = soun->sun_path; X- ndp->ni_dirp[nam->m_len-2] = 0; X- ip = namei(ndp); X- if (ip) { X- iput(ip); X- return (EADDRINUSE); X- } X- if (error = u.u_error) { X- u.u_error = 0; /* XXX */ X- return (error); X- } X- ip = maknode(IFSOCK | 0777, ndp); X- if (ip == NULL) { X- error = u.u_error; /* XXX */ X- u.u_error = 0; /* XXX */ X- return (error); X- } X- ip->i_socket = unp->unp_socket; X- unp->unp_inode = ip; X- unp->unp_addr = m_copy(nam, 0, (int)M_COPYALL); X- iunlock(ip); /* but keep reference */ X- #endif X return (0); X } X X--- 344,349 ---- X*************** X*** 393,399 **** X if (nam->m_len + (nam->m_off - MMINOFF) == MLEN) X return (EMSGSIZE); X *(mtod(nam, caddr_t) + nam->m_len) = 0; X! #ifdef pdp11 X error = UNPCONN(soun->sun_path, nam->m_len, &so2, &ip); X if (error || !so2 || !ip) X goto bad; X--- 359,365 ---- X if (nam->m_len + (nam->m_off - MMINOFF) == MLEN) X return (EMSGSIZE); X *(mtod(nam, caddr_t) + nam->m_len) = 0; X! X error = UNPCONN(soun->sun_path, nam->m_len, &so2, &ip); X if (error || !so2 || !ip) X goto bad; X*************** X*** 411,455 **** X bad: X if (ip) X IPUT(ip); X- #else X- ndp->ni_nameiop = LOOKUP | FOLLOW; X- ndp->ni_segflg = UIO_SYSSPACE; X- ndp->ni_dirp = soun->sun_path; X- ndp->ni_dirp[nam->m_len-2] = 0; X- ip = namei(ndp); X- if (ip == 0) { X- error = u.u_error; X- u.u_error = 0; X- return (error); /* XXX */ X- } X- if (access(ip, IWRITE)) { X- error = u.u_error; X- u.u_error = 0; /* XXX */ X- goto bad; X- } X- if ((ip->i_mode&IFMT) != IFSOCK) { X- error = ENOTSOCK; X- goto bad; X- } X- so2 = ip->i_socket; X- if (so2 == 0) { X- error = ECONNREFUSED; X- goto bad; X- } X- if (so->so_type != so2->so_type) { X- error = EPROTOTYPE; X- goto bad; X- } X- if (so->so_proto->pr_flags & PR_CONNREQUIRED && X- ((so2->so_options&SO_ACCEPTCONN) == 0 || X- (so2 = sonewconn(so2)) == 0)) { X- error = ECONNREFUSED; X- goto bad; X- } X- error = unp_connect2(so, so2); X- bad: X- iput(ip); X- #endif X return (error); X } X X--- 377,382 ---- X*************** X*** 583,595 **** X panic("unp_externalize"); X fp = *rp; X u.u_ofile[f] = fp; X- #ifdef pdp11 X /* -1 added to msgcount, 0 to count */ X SKcall(fadjust, sizeof(fp) + sizeof(int) + sizeof(int), X fp, -1, 0); X- #else X- fp->f_msgcount--; X- #endif X unp_rights--; X *(int *)rp++ = f; X } X--- 510,518 ---- X*************** X*** 612,625 **** X for (i = 0; i < oldfds; i++) { X GETF(fp, *(int *)rp); X *rp++ = fp; X- #ifdef pdp11 X /* bump both the message count and reference count of fp */ X SKcall(fadjust, sizeof(fp) + sizeof(int) + sizeof(int), X fp, 1, 1); X- #else X- fp->f_count++; X- fp->f_msgcount++; X- #endif X unp_rights++; X } X return (0); X--- 535,543 ---- X*** /usr/src/sys/sys/ufs_mount.c.old Mon Sep 16 21:24:08 1996 X--- /usr/src/sys/sys/ufs_mount.c Sat Jan 18 23:01:05 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)ufs_mount.c 1.9 (2.11BSD GTE) 1996/9/13 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)ufs_mount.c 2.0 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 35,41 **** X dev_t dev; X register struct inode *ip; X register struct fs *fs; X! struct nameidata *ndp = &u.u_nd; X struct mount *mp; X u_int lenon, lenfrom; X int error = 0; X--- 35,42 ---- X dev_t dev; X register struct inode *ip; X register struct fs *fs; X! struct nameidata nd; X! struct nameidata *ndp = &nd; X struct mount *mp; X u_int lenon, lenfrom; X int error = 0; X*************** X*** 43,51 **** X X if (u.u_error = getmdev(&dev, uap->fspec)) X return; X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = (caddr_t)uap->freg; X if ((ip = namei(ndp)) == NULL) X return; X if ((ip->i_mode&IFMT) != IFDIR) { X--- 44,50 ---- X X if (u.u_error = getmdev(&dev, uap->fspec)) X return; X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->freg); X if ((ip = namei(ndp)) == NULL) X return; X if ((ip->i_mode&IFMT) != IFDIR) { X*************** X*** 326,338 **** X { X register dev_t dev; X register struct inode *ip; X! register struct nameidata *ndp = &u.u_nd; X X if (!suser()) X return (u.u_error); X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = fname; X ip = namei(ndp); X if (ip == NULL) { X if (u.u_error == ENOENT) X--- 325,336 ---- X { X register dev_t dev; X register struct inode *ip; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X if (!suser()) X return (u.u_error); X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, fname); X ip = namei(ndp); X if (ip == NULL) { X if (u.u_error == ENOENT) X*** /usr/src/sys/sys/sys_kern.c.old Sun Jan 3 00:55:30 1993 X--- /usr/src/sys/sys/sys_kern.c Sat Jan 18 22:59:45 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * %W% (Berkeley) %G% X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * sys_kern.c 1.1 (2.11BSD) 1997/1/18 X */ X X #include "param.h" X*************** X*** 100,111 **** X register struct inode *ip; X char pth[MLEN]; X int error; X! register struct nameidata *ndp = &u.u_nd; X X bcopy(path, pth, len); X! ndp->ni_nameiop = CREATE | FOLLOW; X! ndp->ni_segflg = UIO_SYSSPACE; X! ndp->ni_dirp = pth; X ndp->ni_dirp[len - 2] = 0; X *ipp = 0; X ip = namei(ndp); X--- 100,110 ---- X register struct inode *ip; X char pth[MLEN]; X int error; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X bcopy(path, pth, len); X! NDINIT(ndp, CREATE, FOLLOW, UIO_SYSSPACE, pth); X ndp->ni_dirp[len - 2] = 0; X *ipp = 0; X ip = namei(ndp); X*************** X*** 133,146 **** X register struct inode *ip; X char pth[MLEN]; X int error; X! register struct nameidata *ndp = &u.u_nd; X X bcopy(path, pth, len); X if (!len) X return(EINVAL); /* paranoia */ X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_SYSSPACE; X! ndp->ni_dirp = pth; X ndp->ni_dirp[len - 2] = 0; X ip = namei(ndp); X *ipp = ip; X--- 132,144 ---- X register struct inode *ip; X char pth[MLEN]; X int error; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X X bcopy(path, pth, len); X if (!len) X return(EINVAL); /* paranoia */ X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, pth); X ndp->ni_dirp[len - 2] = 0; X ip = namei(ndp); X *ipp = ip; X*** /usr/src/sys/sys/quota_kern.c.old Fri Dec 29 20:05:23 1995 X--- /usr/src/sys/sys/quota_kern.c Sat Jan 18 23:17:29 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)quota_kern.c 7.1.3 (2.11BSD GTE) 1995/12/29 X * X * I'll say it here and not every other place i've had to hack: X * Mike Karels was right - " just buy a vax...". i have traded cpu cycles X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)quota_kern.c 7.1.4 (2.11BSD GTE) 1997/1/18 X * X * I'll say it here and not every other place i've had to hack: X * Mike Karels was right - " just buy a vax...". i have traded cpu cycles X*************** X*** 31,37 **** X #include "quota.h" X #include "fs.h" X #include "mount.h" X! #include "uio.h" X X /* X * Quota cache - hash chain headers. X--- 31,37 ---- X #include "quota.h" X #include "fs.h" X #include "mount.h" X! #include "namei.h" X X /* X * Quota cache - hash chain headers. X*************** X*** 699,713 **** X register struct inode *ip; X register struct quota *q; X struct dquot *dq; X! register struct nameidata *ndp = &u.u_nd; X int i; X X if (mp->m_qinod) X closedq(mp); X QUOTAUNMAP(); /* paranoia */ X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = fname; X ip = namei(ndp); X QUOTAMAP(); X if (ip == NULL) X--- 699,712 ---- X register struct inode *ip; X register struct quota *q; X struct dquot *dq; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X int i; X X if (mp->m_qinod) X closedq(mp); X QUOTAUNMAP(); /* paranoia */ X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, fname); X ip = namei(ndp); X QUOTAMAP(); X if (ip == NULL) X*** /usr/src/sys/sys/kern_exec.c.old Fri Jan 13 20:23:46 1995 X--- /usr/src/sys/sys/kern_exec.c Sat Jan 18 22:56:29 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)kern_exec.c 1.4 (2.11BSD GTE) 1/13/95 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)kern_exec.c 1.5 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 43,49 **** X int nc; X register char *cp; X register struct buf *bp; X! struct execa *uap; X int na, ne, ucp, ap; X register int cc; X unsigned len; X--- 43,49 ---- X int nc; X register char *cp; X register struct buf *bp; X! struct execa *uap = (struct execa *)u.u_ap; X int na, ne, ucp, ap; X register int cc; X unsigned len; X*************** X*** 58,69 **** X char ex_shell[SHSIZE]; /* #! and name of interpreter */ X struct exec ex_exec; X } exdata; X! register struct nameidata *ndp = &u.u_nd; X int resid, error; X X! ndp->ni_nameiop = LOOKUP | FOLLOW; X! ndp->ni_segflg = UIO_USERSPACE; X! ndp->ni_dirp = ((struct execa *)u.u_ap)->fname; X if ((ip = namei(ndp)) == NULL) X return; X bno = 0; X--- 58,68 ---- X char ex_shell[SHSIZE]; /* #! and name of interpreter */ X struct exec ex_exec; X } exdata; X! struct nameidata nd; X! register struct nameidata *ndp = &nd; X int resid, error; X X! NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname); X if ((ip = namei(ndp)) == NULL) X return; X bno = 0; X*************** X*** 184,190 **** X ne = 0; X nc = 0; X cc = 0; X- uap = (struct execa *)u.u_ap; X bno = malloc(swapmap, ctod((int)btoc(NCARGS + MAXBSIZE))); X if (bno == 0) { X swkill(u.u_procp, "exec"); X--- 183,188 ---- X*** /usr/src/sys/sys/kern_sysctl.c.old Fri Dec 13 22:44:26 1996 X--- /usr/src/sys/sys/kern_sysctl.c Sat Jan 18 23:13:27 1997 X*************** X*** 33,39 **** X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF X * SUCH DAMAGE. X * X! * @(#)kern_sysctl.c 8.4.4 (2.11BSD GTE) 1996/12/13 X */ X X /* X--- 33,39 ---- X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF X * SUCH DAMAGE. X * X! * @(#)kern_sysctl.c 8.4.5 (2.11BSD GTE) 1997/1/18 X */ X X /* X*************** X*** 53,58 **** X--- 53,59 ---- X #include X #include X #include X+ #include X #include X #include X #include X*** /usr/src/sys/sys/sys_pipe.c.old Tue Nov 29 22:16:47 1994 X--- /usr/src/sys/sys/sys_pipe.c Sat Jan 18 23:23:47 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)sys_pipe.c 1.3 (2.11BSD GTE) 11/26/94 X */ X X #include "param.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)sys_pipe.c 1.3 (2.11BSD GTE) 1997/1/18 X */ X X #include "param.h" X*************** X*** 14,19 **** X--- 14,20 ---- X #include "file.h" X #include "fs.h" X #include "mount.h" X+ #include "uio.h" X X extern int ino_ioctl(), ino_close(); X int pipe_rw(), pipe_select(); X*** /usr/src/sys/sys/ufs_disksubr.c.old Fri Jun 16 20:28:33 1995 X--- /usr/src/sys/sys/ufs_disksubr.c Sat Jan 18 23:39:15 1997 X*************** X*** 35,41 **** X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF X * SUCH DAMAGE. X * X! * @(#)ufs_disksubr.c 8.5.3 (2.11BSD GTE) 1995/06/16 X */ X X #include X--- 35,41 ---- X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF X * SUCH DAMAGE. X * X! * @(#)ufs_disksubr.c 8.5.4 (2.11BSD GTE) 1997/1/18 X */ X X #include X*************** X*** 43,48 **** X--- 43,49 ---- X #include X #include X #include X+ #include X #include X #include X #include X*** /usr/src/sys/h/namei.h.old Thu May 31 13:48:29 1990 X--- /usr/src/sys/h/namei.h Sun Jan 19 10:28:58 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)namei.h 1.2 (2.10BSD Berkeley) 1/26/90 X */ X X #ifndef _NAMEI_ X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)namei.h 1.3 (2.11BSD) 1997/1/18 X */ X X #ifndef _NAMEI_ X*************** X*** 26,44 **** X short ni_error; /* error return if any */ X off_t ni_endoff; /* end of useful stuff in directory */ X struct inode *ni_pdir; /* inode of parent directory of dirp */ X! struct iovec ni_iovec; /* MUST be pointed to by ni_iov */ X! struct uio ni_uio; /* directory I/O parameters */ X struct direct ni_dent; /* current directory entry */ X }; X X- #define ni_base ni_iovec.iov_base X- #define ni_count ni_iovec.iov_len X- #define ni_iov ni_uio.uio_iov X- #define ni_iovcnt ni_uio.uio_iovcnt X- #define ni_offset ni_uio.uio_offset X- #define ni_segflg ni_uio.uio_segflg X- #define ni_resid ni_uio.uio_resid X- X /* X * namei operations and modifiers X */ X--- 26,38 ---- X short ni_error; /* error return if any */ X off_t ni_endoff; /* end of useful stuff in directory */ X struct inode *ni_pdir; /* inode of parent directory of dirp */ X! struct inode *ni_ip; /* inode of dirp */ X! enum uio_seg ni_segflg; /* segment flag */ X! off_t ni_offset; /* offset in directory */ X! u_short ni_count; /* offset of open slot (off_t?) */ X struct direct ni_dent; /* current directory entry */ X }; X X /* X * namei operations and modifiers X */ X*************** X*** 49,54 **** X--- 43,54 ---- X #define NOCACHE 0x20 /* name must not be left in cache */ X #define FOLLOW 0x40 /* follow symbolic links */ X #define NOFOLLOW 0x0 /* don't follow symbolic links (pseudo) */ X+ X+ #define NDINIT(ndp,op,flags,segflg,namep) {\ X+ (ndp)->ni_nameiop = op | flags; \ X+ (ndp)->ni_segflg = segflg; \ X+ (ndp)->ni_dirp = namep; \ X+ } X X /* X * This structure describes the elements in the cache of recent X*** /usr/src/sys/h/user.h.old Thu Apr 5 21:41:25 1990 X--- /usr/src/sys/h/user.h Sat Jan 18 23:06:01 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)user.h 1.1 (2.10BSD Berkeley) 12/1/86 X */ X X #ifdef KERNEL X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)user.h 1.2 (2.11BSD) 1997/1/18 X */ X X #ifdef KERNEL X*************** X*** 12,18 **** X #include "exec.h" X #include "time.h" X #include "resource.h" X- #include "namei.h" X #else X #include X #include X--- 12,17 ---- X*************** X*** 19,25 **** X #include X #include X #include X- #include X #endif X X /* X--- 18,23 ---- X*************** X*** 140,147 **** X ino_t nc_inumber; /* inum of cached directory */ X dev_t nc_dev; /* dev of cached directory */ X } u_ncache; X- struct nameidata u_nd; X- X short u_stack[1]; /* kernel stack per user X * extends from u + USIZE*64 X * backward not to reach here X--- 138,143 ---- X*** /usr/src/sys/netimp/if_imphost.h.old Wed Apr 11 16:10:40 1990 X--- /usr/src/sys/netimp/if_imphost.h Sun Jan 19 12:31:58 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_imphost.h 1.1 (2.10BSD Berkeley) 12/1/86 X */ X X /* X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_imphost.h 1.2 (2.11BSD) 1997/1/19 X */ X X /* X*************** X*** 46,52 **** X * automatically at the time a structure is free'd. X */ X #define HPMBUF ((MLEN - sizeof(int)) / sizeof(struct host)) X! #define HOSTHASH(a) ((((a).s_addr>>8)+(a).s_net) % HPMBUF) X X /* X * In-line expansions for queuing operations on X--- 46,52 ---- X * automatically at the time a structure is free'd. X */ X #define HPMBUF ((MLEN - sizeof(int)) / sizeof(struct host)) X! #define HOSTHASH(a) (((a).s_addr>>8) % HPMBUF) X X /* X * In-line expansions for queuing operations on X*** /usr/src/sys/pdpstand/Makefile.old Sat Nov 16 20:56:09 1996 X--- /usr/src/sys/pdpstand/Makefile Sat Jan 18 15:41:57 1997 X*************** X*** 1,4 **** X! # Makefile (2.11BSD) 2.0 1996/11/16 X # X # The limitations on program size have been removed. The addition X # of disklabel support pushed 'restor' over the limit. Even with X--- 1,4 ---- X! # Makefile (2.11BSD) 2.1 1997/1/18 X # X # The limitations on program size have been removed. The addition X # of disklabel support pushed 'restor' over the limit. Even with X*************** X*** 45,51 **** X ht.o tm.o ts.o tmscp.o \ X xp.o rk.o rl.o rx.o br.o hk.o si.o ra.o X X! ALL= mtboot boot disklabel mkfs restor icheck maketape toyset X X all: ${ALL} X X--- 45,51 ---- X ht.o tm.o ts.o tmscp.o \ X xp.o rk.o rl.o rx.o br.o hk.o si.o ra.o X X! ALL= mtboot boot disklabel mkfs restor icheck maketape makesimtape toyset X X all: ${ALL} X X*************** X*** 142,147 **** X--- 142,150 ---- X X maketape: maketape.c X cc -o $@ maketape.c X+ X+ makesimtape: makesimtape.c X+ cc -o $@ makesimtape.c X X toyset: toyset.o srt0.o conf.o libsa.a X ld -X -o $@ srt0.o conf.o $@.o libsa.a -lc X*** /usr/src/sys/pdpstand/tm.c.old Fri Mar 8 16:39:15 1996 X--- /usr/src/sys/pdpstand/tm.c Mon Jan 20 20:13:37 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)tm.c 2.2 (2.11BSD) 1996/3/8 X */ X X /* X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)tm.c 2.3 (2.11BSD) 1997/1/19 X */ X X /* X*************** X*** 61,69 **** X tmstrategy(io, func) X register struct iob *io; X { X! register int com, unit = io->i_unit; X register struct tmdevice *tmaddr; X! int errcnt = 0, ctlr = io->i_ctlr, bae, lo16; X X tmaddr = TMcsr[ctlr]; X retry: X--- 61,69 ---- X tmstrategy(io, func) X register struct iob *io; X { X! int com, unit = io->i_unit; X register struct tmdevice *tmaddr; X! int errcnt = 0, ctlr = io->i_ctlr, bae, lo16, fnc; X X tmaddr = TMcsr[ctlr]; X retry: X*************** X*** 77,92 **** X com = (unit<<8)|(bae<<4) | tmdens[TMDENS(unit)]; X tmaddr->tmbc = -io->i_cc; X tmaddr->tmba = (caddr_t)lo16; X! if (func == READ) X! tmaddr->tmcs = com | TM_RCOM | TM_GO; X! else if (func == WRITE) X! tmaddr->tmcs = com | TM_WCOM | TM_GO; X! else if (func == TM_SREV) { X! tmaddr->tmbc = -1; X! tmaddr->tmcs = com | TM_SREV | TM_GO; X! return(0); X! } else X! tmaddr->tmcs = com | func | TM_GO; X while ((tmaddr->tmcs&TM_CUR) == 0) X continue; X if (tmaddr->tmer&TMER_EOF) { X--- 77,99 ---- X com = (unit<<8)|(bae<<4) | tmdens[TMDENS(unit)]; X tmaddr->tmbc = -io->i_cc; X tmaddr->tmba = (caddr_t)lo16; X! switch (func) X! { X! case READ: X! fnc = TM_RCOM; X! break; X! case WRITE: X! fnc = TM_WCOM; X! break; X! /* X! * Just pass all others thru - all other functions are TM_* opcodes and X! * had better be valid. X! */ X! default: X! fnc = func; X! break; X! } X! tmaddr->tmcs = com | fnc | TM_GO; X while ((tmaddr->tmcs&TM_CUR) == 0) X continue; X if (tmaddr->tmer&TMER_EOF) { X*************** X*** 120,126 **** X } X else X fnc = TM_SFORW; X! while (space--) X! tmstrategy(io, fnc); X return(0); X } X--- 127,133 ---- X } X else X fnc = TM_SFORW; X! io->i_cc = space; X! tmstrategy(io, fnc); X return(0); X } X*** /usr/src/sys/pdpstand/ht.c.old Fri Mar 8 16:34:12 1996 X--- /usr/src/sys/pdpstand/ht.c Mon Jan 20 20:50:54 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)ht.c 2.3 (2.11BSD) 1996/3/8 X */ X X /* X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)ht.c 2.4 (2.11BSD) 1997/1/20 X */ X X /* X*************** X*** 39,45 **** X htstrategy(io, HT_REW); X skip = io->i_part; X while (skip--) { X! io->i_cc = -1; X while (htstrategy(io, HT_SFORW)) X continue; X delay(30000); X--- 39,45 ---- X htstrategy(io, HT_REW); X skip = io->i_part; X while (skip--) { X! io->i_cc = 0; X while (htstrategy(io, HT_SFORW)) X continue; X delay(30000); X*************** X*** 72,96 **** X } X else X fnc = HT_SFORW; X! while (space--) X! { X! io->i_cc = -1; X! htstrategy(io, fnc); X! delay(30000); X! htstrategy(io, HT_SENSE); X! } X } X X /* X! * Returns 0 if no tape mark was seen. Returns 1 if a tape mark (or error) X! * has been encountered. X */ X X htstrategy(io, func) X register struct iob *io; X { X! register unit, com; X! int errcnt, ctlr, bae, lo16; X register struct htdevice *htaddr; X X unit = io->i_unit; X--- 72,93 ---- X } X else X fnc = HT_SFORW; X! io->i_cc = space; X! htstrategy(io, fnc); X! delay(30000); X! htstrategy(io, HT_SENSE); X } X X /* X! * Returns 0 (and sets 'tapemark') if tape mark was seen. Returns -1 on fatal X! * error. Otherwise the length of data tranferred is returned. X */ X X htstrategy(io, func) X register struct iob *io; X { X! int unit, com; X! int errcnt, ctlr, bae, lo16, fnc; X register struct htdevice *htaddr; X X unit = io->i_unit; X*************** X*** 111,126 **** X htaddr->htfc = -io->i_cc; X htaddr->htwc = -(io->i_cc >> 1); X com = (bae << 8) | HT_GO; X! if (func == READ) X! com |= HT_RCOM; X! else if (func == WRITE) X! com |= HT_WCOM; X! else if (func == HT_SREV) { X! htaddr->htfc = -1; X! htaddr->htcs1 = com | HT_SREV; X! return(0); X! } else X! com |= func; X htaddr->htcs1 = com; X while ((htaddr->htcs1 & HT_RDY) == 0) X continue; X--- 108,126 ---- X htaddr->htfc = -io->i_cc; X htaddr->htwc = -(io->i_cc >> 1); X com = (bae << 8) | HT_GO; X! switch (func) X! { X! case READ: X! fnc = HT_RCOM; X! break; X! case WRITE: X! fnc = HT_WCOM; X! break; X! default: X! fnc = func; X! break; X! } X! com |= fnc; X htaddr->htcs1 = com; X while ((htaddr->htcs1 & HT_RDY) == 0) X continue; X*** /usr/src/sys/pdpif/if_acc.c.old Mon Apr 30 15:27:07 1990 X--- /usr/src/sys/pdpif/if_acc.c Sun Jan 19 12:40:56 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_acc.c 1.1 (2.10BSD Berkeley) 12/1/86 X */ X X #include "acc.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_acc.c 1.2 (2.11BSD) 1997/1/19 X */ X X #include "acc.h" X*************** X*** 305,310 **** X--- 305,311 ---- X if (sc->acc_if->if_snd.ifq_head) X accstart(unit); X out: X+ return; X } X X /* X*************** X*** 384,388 **** X--- 385,390 ---- X addr->icsr = X IN_MRDY | ACC_IE | IN_WEN | ((info & 0x30000) >> 12) | ACC_GO; X out: X+ return; X } X #endif X*** /usr/src/sys/pdpif/if_css.c.old Mon Apr 30 15:26:48 1990 X--- /usr/src/sys/pdpif/if_css.c Sun Jan 19 12:43:55 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_css.c 1.1 (2.10BSD Berkeley) 12/1/86 X */ X X #include "css.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_css.c 1.2 (2.11BSD) 1997/1/18 X */ X X #include "css.h" X*************** X*** 324,329 **** X--- 324,330 ---- X if (sc->css_if->if_snd.ifq_head) X cssstart(unit); X out: X+ return; X } X X /* X*************** X*** 396,400 **** X--- 397,402 ---- X addr->css_icsr = X IN_HRDY | CSS_IE | IN_WEN | ((info & 0x30000) >> 12) | CSS_GO; X out: X+ return; X } X #endif NCSS X*** /usr/src/sys/pdpif/if_en.c.old Fri Dec 31 23:50:58 1993 X--- /usr/src/sys/pdpif/if_en.c Sun Jan 19 14:11:00 1997 X*************** X*** 3,9 **** X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_en.c 1.2 (2.11BSD GTE) 12/31/93 X */ X X #include "en.h" X--- 3,9 ---- X * All rights reserved. The Berkeley software License Agreement X * specifies the terms and conditions for redistribution. X * X! * @(#)if_en.c 1.3 (2.11BSD GTE) 1997/1/19 X */ X X #include "en.h" X*************** X*** 21,36 **** X #include "protosw.h" X #include "socket.h" X #include "pdpuba/ubavar.h" X! #ifdef notdef X! #include "enreg.h" X! #endif notdef X #include "netinet/in.h" X #include "netinet/in_systm.h" X #include "net/if.h" X #include "pdpif/if_en.h" X #include "pdpif/if_uba.h" X #include "netinet/ip.h" X #include "netinet/ip_var.h" X #include "net/route.h" X #include "errno.h" X X--- 21,36 ---- X #include "protosw.h" X #include "socket.h" X #include "pdpuba/ubavar.h" X! #include "if_enreg.h" X #include "netinet/in.h" X #include "netinet/in_systm.h" X+ #include "net/netisr.h" X #include "net/if.h" X #include "pdpif/if_en.h" X #include "pdpif/if_uba.h" X #include "netinet/ip.h" X #include "netinet/ip_var.h" X+ #include "netinet/in_var.h" X #include "net/route.h" X #include "errno.h" X X*************** X*** 44,50 **** X { enprobe, 0, enattach, 0, enstd, "en", eninfo }; X #define ENUNIT(x) minor(x) X X! int eninit(),enoutput(),enreset(); X X /* X * Ethernet software status per interface. X--- 44,50 ---- X { enprobe, 0, enattach, 0, enstd, "en", eninfo }; X #define ENUNIT(x) minor(x) X X! int eninit(),enoutput(); X X /* X * Ethernet software status per interface. X*************** X*** 110,149 **** X es->es_if.if_unit = ui->ui_unit; X es->es_if.if_name = "en"; X es->es_if.if_mtu = ENMTU; X- es->es_if.if_net = ui->ui_flags; X- es->es_if.if_host[0] = X- (~(((struct endevice *)eninfo[ui->ui_unit]->ui_addr)->en_addr)) & 0xff; X- sin = (struct sockaddr_in *)&es->es_if.if_addr; X- sin->sin_family = AF_INET; X- sin->sin_addr = if_makeaddr(es->es_if.if_net, es->es_if.if_host[0]); X- sin = (struct sockaddr_in *)&es->es_if.if_broadaddr; X- sin->sin_family = AF_INET; X- sin->sin_addr = if_makeaddr(es->es_if.if_net, 0); X es->es_if.if_flags = IFF_BROADCAST; X es->es_if.if_init = eninit; X es->es_if.if_output = enoutput; X- es->es_if.if_ubareset = enreset; X es->es_ifuba.ifu_flags = UBA_NEEDBDP | UBA_NEED16 | UBA_CANTWAIT; X if_attach(&es->es_if); X } X X /* X- * Reset of interface after UNIBUS reset. X- * If interface is on specified uba, reset its state. X- */ X- enreset(unit, uban) X- int unit, uban; X- { X- register struct uba_device *ui; X- X- if (unit >= NEN || (ui = eninfo[unit]) == 0 || ui->ui_alive == 0 || X- ui->ui_ubanum != uban) X- return; X- printf(" en%d", unit); X- eninit(unit); X- } X- X- /* X * Initialization of interface; clear recorded pending X * operations, and reinitialize UNIBUS usage. X */ X--- 110,123 ---- X*************** X*** 305,321 **** X return; X } X /* X! * Another backoff. Restart with delay based on n low bits X! * of the interval timer. X */ X es->es_mask <<= 1; X! es->es_delay = mfpr(ICR) &~ es->es_mask; X enstart(unit); X } X X struct sockaddr_pup pupsrc = { AF_PUP }; X struct sockaddr_pup pupdst = { AF_PUP }; X struct sockproto pupproto = { PF_PUP }; X /* X * Ethernet interface receiver interrupt. X * If input error just drop packet. X--- 279,296 ---- X return; X } X /* X! * Another backoff. X */ X es->es_mask <<= 1; X! es->es_delay = ffs(es->es_mask); X enstart(unit); X } X X+ #ifdef notdef X struct sockaddr_pup pupsrc = { AF_PUP }; X struct sockaddr_pup pupdst = { AF_PUP }; X struct sockproto pupproto = { PF_PUP }; X+ #endif X /* X * Ethernet interface receiver interrupt. X * If input error just drop packet. X*************** X*** 357,363 **** X len -= sizeof (struct en_header); X if (len > ENMRU) X goto setup; /* sanity */ X! en = (struct en_header *)(es->es_ifuba.ifu_r.ifrw_addr); X #define endataaddr(en, off, type) ((type)(((caddr_t)((en)+1)+(off)))) X if (en->en_type >= ENPUP_TRAIL && X en->en_type < ENPUP_TRAIL+ENPUP_NTRAILER) { X--- 332,338 ---- X len -= sizeof (struct en_header); X if (len > ENMRU) X goto setup; /* sanity */ X! en = (struct en_header *)(es->es_ifuba.ifu_r.ifrw_info); X #define endataaddr(en, off, type) ((type)(((caddr_t)((en)+1)+(off)))) X if (en->en_type >= ENPUP_TRAIL && X en->en_type < ENPUP_TRAIL+ENPUP_NTRAILER) { X*************** X*** 513,521 **** X m->m_len += sizeof (struct en_header); X } X en = mtod(m, struct en_header *); X- en->en_shost = ifp->if_host[0]; X en->en_dhost = dest; X! en->en_type = type; X X /* X * Queue message on interface, and start output if interface X--- 488,495 ---- X m->m_len += sizeof (struct en_header); X } X en = mtod(m, struct en_header *); X en->en_dhost = dest; X! en->en_type = htons((u_short)type); X X /* X * Queue message on interface, and start output if interface X*** /usr/src/sys/GENERIC/rk.h.old Sat Jan 18 16:55:56 1997 X--- /usr/src/sys/GENERIC/rk.h Tue Jan 21 20:02:37 1997 X*************** X*** 1 **** X! #define NRK 0 X--- 1 ---- X! #define NRK 8 X*** /usr/src/sys/GENERIC/Makefile.old Sat Sep 21 22:33:57 1996 X--- /usr/src/sys/GENERIC/Makefile Tue Jan 21 20:03:29 1997 X*************** X*** 10,16 **** X # software without specific prior written permission. This software X # is provided ``as is'' without express or implied warranty. X # X! # 2.7 (2.11BSD GTE) 1996/9/21 X # X ######################################################### X # Non-network, but separate I/D kernel # X--- 10,16 ---- X # software without specific prior written permission. This software X # is provided ``as is'' without express or implied warranty. X # X! # 2.8 (2.11BSD GTE) 1997/1/21 X # X ######################################################### X # Non-network, but separate I/D kernel # X*************** X*** 48,54 **** X X BASE= br.o dh.o dhu.o dhv.o dkbad.o dr.o dz.o init_sysent.o kern_clock.o \ X kern_descrip.o kern_mman.o kern_proc.o kern_sig.o kern_subr.o \ X! kern_synch.o lp.o machdep.o ra.o ram.o rk.o si.o \ X subr_rmap.o subr_xxx.o sys_inode.o sys_pipe.o trap.o tty.o \ X tty_conf.o tty_subr.o tty_tb.o tty_tty.o ufs_alloc.o ufs_bio.o \ X ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \ X--- 48,54 ---- X X BASE= br.o dh.o dhu.o dhv.o dkbad.o dr.o dz.o init_sysent.o kern_clock.o \ X kern_descrip.o kern_mman.o kern_proc.o kern_sig.o kern_subr.o \ X! kern_synch.o lp.o machdep.o ra.o ram.o si.o \ X subr_rmap.o subr_xxx.o sys_inode.o sys_pipe.o trap.o tty.o \ X tty_conf.o tty_subr.o tty_tb.o tty_tty.o ufs_alloc.o ufs_bio.o \ X ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_namei.o \ X*************** X*** 64,70 **** X OV6= tmscp.o tmscpdump.o X OV7= rl.o mch_fpsim.o ingreslock.o ufs_disksubr.o X OV8= rx.o kern_sysctl.o vm_sched.o vm_text.o X! OV9= kern_pdp.o kern_xxx.o ufs_syscalls2.o mem.o ufs_subr.o X X KERNOBJ=${CONF} ${BASE} ${OV1} ${OV2} ${OV3} ${OV4} ${OV5} \ X ${OV6} ${OV7} ${OV8} ${OV9} ${OV10} ${OV11} ${OV12} \ X--- 64,70 ---- X OV6= tmscp.o tmscpdump.o X OV7= rl.o mch_fpsim.o ingreslock.o ufs_disksubr.o X OV8= rx.o kern_sysctl.o vm_sched.o vm_text.o X! OV9= kern_pdp.o kern_xxx.o ufs_syscalls2.o mem.o ufs_subr.o rk.o X X KERNOBJ=${CONF} ${BASE} ${OV1} ${OV2} ${OV3} ${OV4} ${OV5} \ X ${OV6} ${OV7} ${OV8} ${OV9} ${OV10} ${OV11} ${OV12} \ X*** /usr/src/etc/dtab.old Sun Dec 22 16:20:35 1991 X--- /usr/src/etc/dtab Tue Jan 21 20:11:36 1997 X*************** X*** 16,22 **** X # vp ? 177500 174 4 vpintr # Versatec; should be before lp X # lp ? 177514 200 4 lpintr # lp-11 line printer X ra ? 172150 154 5 raintr # uda50, rqdx1/2/3 X! # rk ? 177400 220 5 rkintr # rk05 X rl ? 174400 160 5 rlintr # rl-01/02 X # rm ? 176700 254 5 rmintr # rjm02/rwm03, rm02/03/05 X # br ? 176710 254 5 brintr # Eaton br1537/br1711 X--- 16,22 ---- X # vp ? 177500 174 4 vpintr # Versatec; should be before lp X # lp ? 177514 200 4 lpintr # lp-11 line printer X ra ? 172150 154 5 raintr # uda50, rqdx1/2/3 X! rk ? 177400 220 5 rkintr # rk05 X rl ? 174400 160 5 rlintr # rl-01/02 X # rm ? 176700 254 5 rmintr # rjm02/rwm03, rm02/03/05 X # br ? 176710 254 5 brintr # Eaton br1537/br1711 X*** /usr/src/share/adb/u.old Fri Apr 6 09:11:11 1990 X--- /usr/src/share/adb/u Sat Jan 18 22:01:47 1997 X*************** X*** 32,40 **** X +/"rlimits"n12D X +/"quota"non X +/"nc_off"16t"nc_inum"8t"nc_dev"nDubbn X- +/"ni_dirp"8t"nameiop"8t"ni_error"nouun X- +/"ni_endoff"8t"ni_pdir"nDon X- +/"ni_base"8t"ni_count"noun X- +/"ni_iov"8t"ni_iovcnt"noun X- +/"ni_offset"8t"ni_segflg"8t"ni_resid"nDuun X- +/"d_inum"8t"d_name"nu14Cn X--- 32,34 ---- X*** /usr/src/usr.sbin/pstat/pstat.c.old Thu Dec 15 19:45:46 1994 X--- /usr/src/usr.sbin/pstat/pstat.c Sun Jan 19 17:16:14 1997 X*************** X*** 9,15 **** X "@(#) Copyright (c) 1980 Regents of the University of California.\n\ X All rights reserved.\n"; X X! static char sccsid[] = "@(#)pstat.c 5.8.2 (2.11BSD GTE) 12/7/94"; X #endif X X /* X--- 9,15 ---- X "@(#) Copyright (c) 1980 Regents of the University of California.\n\ X All rights reserved.\n"; X X! static char sccsid[] = "@(#)pstat.c 5.8.3 (2.11BSD GTE) 1997/1/19"; X #endif X X /* X*************** X*** 73,95 **** X { "_ninode" }, X #define SPTY 16 X { "_pt_tty" }, X! #define SDMF 17 X! { "_dmf_tty" }, X! #define SNDMF 18 X! { "_ndmf" }, X! #define SNPTY 19 X { "_npty" }, X! #define SDHU 20 X { "_dhu_tty" }, X! #define SNDHU 21 X { "_ndhu" }, X! #define SDMZ 22 X! { "_dmz_tty" }, X! #define SNDMZ 23 X! { "_ndmz" }, X! #define SDHV 24 X { "_dhv_tty" }, X! #define SNDHV 25 X { "_ndhv" }, X { "" } X }; X--- 73,87 ---- X { "_ninode" }, X #define SPTY 16 X { "_pt_tty" }, X! #define SNPTY 17 X { "_npty" }, X! #define SDHU 18 X { "_dhu_tty" }, X! #define SNDHU 19 X { "_ndhu" }, X! #define SDHV 20 X { "_dhv_tty" }, X! #define SNDHV 21 X { "_ndhv" }, X { "" } X }; X*************** X*** 438,449 **** X dottytype("dz", SDZ, SNDZ); X if (nl[SNDH].n_type != 0) X dottytype("dh", SDH, SNDH); X- if (nl[SNDMF].n_type != 0) X- dottytype("dmf", SDMF, SNDMF); X if (nl[SNDHU].n_type != 0) X dottytype("dhu", SDHU, SNDHU); X- if (nl[SNDMZ].n_type != 0) X- dottytype("dmz", SDMZ, SNDMZ); X if (nl[SNDHV].n_type != 0) X dottytype("dhv", SDHV, SNDHV); X if (nl[SNPTY].n_type != 0) X--- 430,437 ---- X*************** X*** 532,538 **** X struct user U; X long *ip; X register i, j; X- register struct nameidata *nd = &U.u_nd; X X lseek(fm, ubase << 6, 0); X read(fm, &U, sizeof(U)); X--- 520,525 ---- X*************** X*** 643,649 **** X printf("lastfile\t%d\n", U.u_lastfile); X printf("cdir\t%.1o\n", U.u_cdir); X printf("rdir\t%.1o\n", U.u_rdir); X- printf("pdir\t%.1o\n", nd->ni_pdir); X printf("ttyp\t%.1o\n", U.u_ttyp); X printf("ttyd\t%d,%d\n", major(U.u_ttyd), minor(U.u_ttyd)); X printf("cmask\t%.1o\n", U.u_cmask); X--- 630,635 ---- X*************** X*** 683,697 **** X } X printf("\n"); X printf("quota\t%.1o\n", U.u_quota); X- printf("base,count,offset\t%.1o %u %ld\n", nd->ni_base, X- nd->ni_count, nd->ni_offset); X- printf("segflg\t%d\n", nd->ni_segflg); X printf("ncache\t%ld %u %d,%d\n", U.u_ncache.nc_prevoffset, X U.u_ncache.nc_inumber, major(U.u_ncache.nc_dev), X minor(U.u_ncache.nc_dev)); X- printf("endoff\t%ld\n", nd->ni_endoff); X- printf("dirp\t%.1o\n", nd->ni_dirp); X- printf("dent\t%u %s\n", nd->ni_dent.d_ino, nd->ni_dent.d_name); X } X X oatoi(s) X--- 669,677 ---- X*** /VERSION.old Fri Jan 10 20:13:26 1997 X--- /VERSION Sun Jan 19 10:16:54 1997 X*************** X*** 1,4 **** X! Current Patch Level: 361 X X 2.11 BSD X ============ X--- 1,4 ---- X! Current Patch Level: 362 X X 2.11 BSD X ============ SHAR_EOF : || echo 'restore of /tmp/362.patch failed' fi # ============= /tmp/362.shar ============== if test -f '/tmp/362.shar' && test X"$1" != X"-c"; then echo 'x - skipping /tmp/362.shar (file already exists)' else echo 'x - extracting /tmp/362.shar (text)' sed 's/^X//' << 'SHAR_EOF' > '/tmp/362.shar' && X#! /bin/sh X# This is a shell archive, meaning: X# 1. Remove everything above the #! /bin/sh line. X# 2. Save the resulting text in a file. X# 3. Execute the file with /bin/sh (not csh) to create: X# /usr/src/sys/pdpstand/makesimtape.c X# This archive created: Tue Jan 21 21:24:55 1997 Xexport PATH; PATH=/bin:/usr/bin:$PATH Xif test -f '/usr/src/sys/pdpstand/makesimtape.c' Xthen X echo shar: "will not over-write existing file '/usr/src/sys/pdpstand/makesimtape.c'" Xelse Xsed 's/^Z//' << \SHAR_EOF > '/usr/src/sys/pdpstand/makesimtape.c' XZ/* XZ * @(#)makesimtape.c 1.0 (2.11BSD) 1997/1/17 XZ * Hacked 'maketape.c' to write a file in a format suitable for XZ * use with Bob Supnik's PDP-11 simulator's emulated tape driver. XZ */ XZ XZ#include XZ#include XZ#include XZ#include XZ#include XZ#include XZ#include XZ XZ#define MAXB 30 XZ XZ char buf[MAXB * 512]; XZ char name[50]; XZ int blksz, recsz; XZ int mt, fd, cnt; XZ struct iovec iovec[2]; XZ void usage(); XZ XZmain(argc, argv) XZ int argc; XZ char *argv[]; XZ { XZ int i, j = 0, k = 0; XZ register char *outfile = NULL, *infile = NULL; XZ FILE *mf; XZ struct stat st; XZ XZ while ((i = getopt(argc, argv, "i:o:")) != EOF) XZ { XZ switch (i) XZ { XZ case 'o': XZ outfile = optarg; XZ break; XZ case 'i': XZ infile = optarg; XZ break; XZ default: XZ usage(); XZ /* NOTREACHED */ XZ } XZ } XZ if (!outfile || !infile) XZ usage(); XZ /* NOTREACHED */ XZ/* XZ * Stat the outfile and make sure it either 1) Does not exist, or XZ * 2) Exists but is a regular file. XZ*/ XZ if (stat(outfile, &st) != -1 && !(S_ISREG(st.st_mode))) XZ errx(1, "outfile must either not exist or be a regular file"); XZ /* NOTREACHED */ XZ XZ mt = open(outfile, O_WRONLY|O_CREAT|O_TRUNC, 0600); XZ if (mt < 0) XZ err(1, "Can not create %s", outfile); XZ /* NOTREACHED */ XZ XZ mf = fopen(infile, "r"); XZ if (!mf) XZ err(1, "Can not open %s", infile); XZ /* NOTREACHED*/ XZ XZ while (1) XZ { XZ if ((i = fscanf(mf, "%s %d", name, &blksz))== EOF) XZ exit(0); XZ if (i != 2) { XZ fprintf(stderr,"Help! Scanf didn't read 2 things (%d)\n", i); XZ exit(1); XZ } XZ if (blksz <= 0 || blksz > MAXB) XZ { XZ fprintf(stderr, "Block size %u is invalid\n", blksz); XZ exit(1); XZ } XZ recsz = blksz * 512; /* convert to bytes */ XZ iovec[0].iov_len = sizeof (int); XZ iovec[0].iov_base = (char *)&recsz; XZ iovec[1].iov_len = recsz; XZ iovec[1].iov_base = buf; XZ XZ if (strcmp(name, "*") == 0) XZ { XZ recsz = 0; XZ if (writev(mt, iovec, 1) < 0) XZ warn(1, "writev of pseudo tapemark failed"); XZ k++; XZ continue; XZ } XZ fd = open(name, 0); XZ if (fd < 0) XZ err(1, "Can't open %s for reading", name); XZ /* NOTREACHED */ XZ printf("%s: block %d, file %d\n", name, j, k); XZ XZ /* XZ * we pad the last record with nulls XZ * (instead of the bell std. of padding with trash). XZ * this allows you to access text files on the XZ * tape without garbage at the end of the file. XZ * (note that there is no record length associated XZ * with tape files) XZ */ XZ XZ while ((cnt=read(fd, buf, recsz)) == recsz) XZ { XZ j++; XZ if (writev(mt, iovec, 2) < 0) XZ err(1, "writev #1"); XZ /* NOTREACHED */ XZ } XZ if (cnt > 0) XZ { XZ j++; XZ bzero(buf + cnt, recsz - cnt); XZ if (writev(mt, iovec, 2) < 0) XZ err(1, "writev #2"); XZ /* NOTREACHED */ XZ } XZ close(fd); XZ } XZ/* XZ * Write two tape marks to simulate EOT XZ*/ XZ recsz = 0; XZ writev(mt, iovec, 1); XZ writev(mt, iovec, 1); XZ } XZ XZvoid XZusage() XZ { XZ fprintf(stderr, "usage: makesimtape -o outfilefile -i inputfile\n"); XZ exit(1); XZ } XSHAR_EOF Xchmod 644 '/usr/src/sys/pdpstand/makesimtape.c' Xfi Xexit 0 X# End of shell archive SHAR_EOF : || echo 'restore of /tmp/362.shar failed' fi exit 0