[net.sources] /dev/stdin for SVR2

tony@asgb.UUCP (Tony Andrews) (06/19/85)

The following is an implementation of /dev/stdin as described by
Rob Pike last week at Usenix. For those of you who weren't there,
/dev/stdin, when opened, dups file descriptor 0. This eliminates
the need for programs to treat the file name "-" as a special
case meaning the standard input.

To install this code, change the third field of the line for "memory"
in /etc/master from 6 to 26. Apply the following diff to io/mem.c.
This is from the ns32000 port so your file may vary somewhat.

Tony Andrews
Burroughs Corp.
Boulder, CO
...ihnp4!noao!hao!asgb!tony


16a17
>  *	minor device 3 is stdin (dups fildes 0 when opened) --tony
27a29
> #include "sys/file.h"
32a35,60
> /*
>  * mmopen is used only by /dev/stdin --tony
>  */
> mmopen(dev)
> dev_t	dev;
> {
> 	register struct file *fp;
> 	register int fd;
> 
> 	if ((minor(dev) != 3) || (u.u_error != 0))
> 		return;
> 
> 	if ((fp = getf(fd = u.u_rval1)) == NULL)
> 		return;
> 	u.u_ofile[fd] = NULL;
> 	closef(fp);				/* close /dev/stdin */
> 
> 	if ((fp = getf(0)) == NULL)		/* dup filedes 0 */
> 		return;
> 	if ((fd = ufalloc(1)) < 0)
> 		return;
> 	u.u_ofile[fd] = fp;
> 	fp->f_count++;
> 	return;
> }
> 
37a66,68
> 	if (minor(dev) == 3)
> 		panic("mmread on /dev/stdin");
> 
64a96,98
> 
> 	if (minor(dev) == 3)
> 		panic("mmwrite on /dev/stdin");