shithub: riscv

Download patch

ref: feb6d6f0a32e5dac88d1ef46bbc4396ec44ce40b
parent: 225c359beab9e2f17c66e65647b9e0a94f942620
author: cinap_lenrek <[email protected]>
date: Sat Mar 7 15:27:20 EST 2020

dossrv, 9660srv, hjfs: stop *READING* standard *OUTPUT* with -s flag

with the -s flag, we should read 9P messages from
standard *INPUT* (fd 0) and write responses to
standard *OUTPUT* (fd 1).

before these servers where reading from fd 1,
assuming they where both the same files.

--- a/sys/man/4/hjfs
+++ b/sys/man/4/hjfs
@@ -59,7 +59,7 @@
 Ignore permissions.
 .TP
 .B -s
-Read and write protocol messages on file descriptor zero.
+Read and write protocol messages on standard file descriptors zero and one.
 .PD
 .SH SOURCE
 .B /sys/src/cmd/hjfs
--- a/sys/src/cmd/9660srv/main.c
+++ b/sys/src/cmd/9660srv/main.c
@@ -11,7 +11,7 @@
 	Maxiosize	= IOHDRSZ+Maxfdata,
 };
 
-void io(int);
+void io(void);
 void rversion(void);
 void	rattach(void);
 void	rauth(void);
@@ -119,14 +119,7 @@
 	for(xs=xsublist; *xs; xs++)
 		(*(*xs)->reset)();
 
-	if(stdio) {
-		pipefd[0] = 0;
-		pipefd[1] = 1;
-	} else {
-		close(0);
-		close(1);
-		open("/dev/null", OREAD);
-		open("/dev/null", OWRITE);
+	if(!stdio){
 		if(pipe(pipefd) < 0)
 			panic(1, "pipe");
 		sprint(srvfile, "/srv/%s", srvname);
@@ -136,24 +129,25 @@
 		fprint(srvfd, "%d", pipefd[0]);
 		close(pipefd[0]);
 		fprint(2, "%s %d: serving %s\n", argv0, getpid(), srvfile);
+		dup(pipefd[1], 0);
+		dup(pipefd[1], 1);
 	}
-	srvfd = pipefd[1];
 
 	switch(rfork(RFNOWAIT|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){
 	case -1:
 		panic(1, "fork");
 	default:
-		_exits(0);
+		_exits(nil);
 	case 0:
 		break;
 	}
 
-	io(srvfd);
-	exits(0);
+	io();
+	exits(nil);
 }
 
 void
-io(int srvfd)
+io(void)
 {
 	int n, pid;
 	Fcall xreq, xrep;
@@ -163,7 +157,7 @@
 	pid = getpid();
 	fmtinstall('F', fcallfmt);
 
-	while((n = read9pmsg(srvfd, mdata, sizeof mdata)) != 0){
+	while((n = read9pmsg(0, mdata, sizeof mdata)) != 0){
 		if(n < 0)
 			panic(1, "mount read");
 		if(convM2S(mdata, n, req) != n)
@@ -195,7 +189,7 @@
 		n = convS2M(rep, mdata, sizeof mdata);
 		if(n == 0)
 			panic(1, "convS2M error on write");
-		if(write(srvfd, mdata, n) != n)
+		if(write(1, mdata, n) != n)
 			panic(1, "mount write");
 		if(nerr_lab != 0)
 			panic(0, "err stack %d: %lux %lux %lux %lux %lux %lux", nerr_lab,
--- a/sys/src/cmd/dossrv/fns.h
+++ b/sys/src/cmd/dossrv/fns.h
@@ -26,7 +26,7 @@
 long	getstart(Xfs *xf, Dosdir *d);
 Xfs	*getxfs(char*, char*);
 long	gtime(Dosdir *d);
-void	io(int srvfd);
+void	io(void);
 int	iscontig(Xfs *xf, Dosdir *d);
 int	isroot(vlong addr);
 int	makecontig(Xfile*, int);
--- a/sys/src/cmd/dossrv/xfssrv.c
+++ b/sys/src/cmd/dossrv/xfssrv.c
@@ -18,7 +18,6 @@
 uchar	statbuf[STATMAX];
 int	errno;
 char	errbuf[ERRMAX];
-void	rmservice(void);
 char	srvfile[64];
 char	*deffile;
 int	doabort;
@@ -87,14 +86,9 @@
 	else
 		usage();
 
-	if(stdio){
-		pipefd[0] = 0;
-		pipefd[1] = 1;
-	}else{
-		close(0);
-		close(1);
-		open("/dev/null", OREAD);
-		open("/dev/null", OWRITE);
+	iotrack_init();
+
+	if(!stdio){
 		if(pipe(pipefd) < 0)
 			panic("pipe");
 		srvfd = create(srvfile, OWRITE|ORCLOSE, 0600);
@@ -102,33 +96,32 @@
 			panic(srvfile);
 		fprint(srvfd, "%d", pipefd[0]);
 		close(pipefd[0]);
-		atexit(rmservice);
 		fprint(2, "%s: serving %s\n", argv0, srvfile);
+
+		dup(pipefd[1], 0);
+		dup(pipefd[1], 1);
 	}
-	srvfd = pipefd[1];
 
 	switch(rfork(RFNOWAIT|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){
 	case -1:
 		panic("fork");
 	default:
-		_exits(0);
+		_exits(nil);
 	case 0:
 		break;
 	}
 
-	iotrack_init();
-
 	if(!chatty){
 		close(2);
 		open("#c/cons", OWRITE);
 	}
 
-	io(srvfd);
-	exits(0);
+	io();
+	exits(nil);
 }
 
 void
-io(int srvfd)
+io(void)
 {
 	int n, pid;
 
@@ -135,7 +128,7 @@
 	pid = getpid();
 
 	fmtinstall('F', fcallfmt);
-	while((n = read9pmsg(srvfd, mdata, sizeof mdata)) != 0){
+	while((n = read9pmsg(0, mdata, sizeof mdata)) != 0){
 		if(n < 0)
 			panic("mount read");
 		if(convM2S(mdata, n, req) != n)
@@ -162,16 +155,10 @@
 		n = convS2M(rep, mdata, sizeof mdata);
 		if(n == 0)
 			panic("convS2M error on write");
-		if(write(srvfd, mdata, n) != n)
+		if(write(1, mdata, n) != n)
 			panic("mount write");
 	}
 	chat("server shut down\n");
-}
-
-void
-rmservice(void)
-{
-	remove(srvfile);
 }
 
 char *
--- a/sys/src/cmd/hjfs/9p.c
+++ b/sys/src/cmd/hjfs/9p.c
@@ -142,7 +142,7 @@
 		threadlistensrv(&mysrv, *nets++);
 	}
 	if(stdio){
-		mysrv.infd = 1;
+		mysrv.infd = 0;
 		mysrv.outfd = 1;
 		srv(&mysrv);
 	}else